我在asynctask类中使用last.fm api获取专辑封面。代码在postExecute()中有延迟,虽然它在doInBackground()中根本不起作用..它根本没有对我的UI进行更新,所以我不确定发生了什么
@Override
public Void doInBackground(String... args){
if(oslist.size()!=0) {
for (int i = 0; i < 30; i++) {
String albumURL = null;
try{
albumURL = new RetrieveAlbumArtUrlTask().execute(String.format(APIURL,
URLEncoder.encode(oslist.get(i).get(TAG_ARTIST), "UTF-8"),
URLEncoder.encode(oslist.get(i).get(TAG_ALBUM), "UTF-8"))).get();
} catch (UnsupportedEncodingException e) {
} catch (InterruptedException e) {
} catch(ExecutionException e){
}
oslist.get(i).put("albumArtUrl", albumURL);
Log.v("TEST", ""+albumURL);
}
}
return null;
}
答案 0 :(得分:0)
RunOnUIThread
函数并从中更新UI。
答案 1 :(得分:0)
AsyncTask
以这种方式不起作用Teddy。 AsyncTask
分为两部分。 doInBackground()
段旨在处理非UI组件,因为它在UI线程之外工作。如果您需要在AsyncTask
内对UI进行更改,请使用自定义标识符调用publishProgress()
以区分要更新的内容。
我经常用枚举来做这件事。然后,您将看到您的UI更改发生以及您的非UI组件滞后于UI。请稍微阅读AsyncTask
示例。