-1

我有一个 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;
    }
}
4

1 回答 1

0

按照 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);
}
于 2021-11-19T11:41:14.310 回答