我有一個 Android 片段,它使用 AsyncTask 請求網頁并檢索應顯示在 TextView 中的頁面標題。我在 onCreateView() 中呼叫了 AsyncTask。
問題是在 AsyncTask 完成和片段視圖被創建和顯示之前有一個明顯的延遲。它似乎不是異步運行的。
代碼如下:
GetWebsiteAsyncTask getWebsiteAsyncTask = new GetWebsiteAsyncTask();
String websiteTitle = getWebsiteAsyncTask.execute().get();
websiteViewModel.setTitle(websiteTitle);
將 AsyncTask 定義為:
class GetWebsiteAsyncTask extends AsyncTask<Void, Void, String> {
private static final String TAG = GetWebsiteAsyncTask.class.getName();
@Override
protected String doInBackground(Void... voids) {
try {
Document doc = Jsoup.connect("https://www.google.com").get();
return doc.title();
} catch (Exception e) {
Log.e(TAG, Log.getStackTraceString(e));
}
return null;
}
}
uj5u.com熱心網友回復:
遵循 Selvin 在評論中的建議,我修改了代碼以在 AsyncTask 中使用回呼委托,如下所示:
1.
public interface AsyncResponse {
void processFinish(String output);
}
class GetWebsiteAsyncTask extends AsyncTask<Void, Void, String> {
public AsyncResponse delegate = null;
@Override
protected void onPostExecute(String result) {
delegate.processFinish(result);
}
}
public class WebsiteFragment extends Fragment implements AsyncResponse
GetWebsiteAsyncTask getWebsiteAsyncTask = new GetWebsiteAsyncTask();
getWebsiteAsyncTask.delegate = this;
getWebsiteAsyncTask.execute();
@Override
public void processFinish(String output) {
websiteViewModel.setTitle(output);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/364615.html
標籤:爪哇 安卓 android-fragments android-asynctask 片段创建视图
