在 AsyncTask 完成后做某事
Posted
技术标签:
【中文标题】在 AsyncTask 完成后做某事【英文标题】:Doing something after AsyncTask finishes 【发布时间】:2020-10-27 11:39:22 【问题描述】:我正在开发一个使用 Jsoup 检索网页内容的 android 应用程序。为了执行此操作,我使用了单独的 AsyncTask
类。我需要在AsyncTask
s 完成后显示检索到的结果。 doInBackground
方法将检索到的数据存储到一个数组中。
ScheduleExtractor scheduleExtractor = new ScheduleExtractor();
scheduleExtractor.execute();
if(myArray.length==0)
///
else
//show results
但是,当我在调用Asynctask.execute()
方法后尝试访问该数组时,该数组没有元素。那么,有没有办法确保在完成AsyncTask
方法之后才能访问数组?谢谢。
【问题讨论】:
如果ScheduleExtractor
是你AsyncTask
然后检查onPostExecute()
检查developer.android.com/reference/android/os/AsyncTask
【参考方案1】:
AsyncTask
s 顾名思义,您是否异步工作,这意味着对 execute()
的调用会在不同的线程中启动进程,而您的其余代码在调用 execute()
后会继续在您自己的线程上运行.
如果您希望您的 AsyncTask
有最终结果,您应该覆盖 onPostExecute(Result)
方法并在那里检查您的数组的长度。这是一个简单的例子(假设最终结果类型是int[]
:
class ScheduleExtractor extends AsyncTask<Void, Void, int[]>
@Override
protected int[] doInBackground(Void... params)
// Process your retrieved data and return the result here
@Override
protected void onPostExecute(int[] arrayResult)
if(arrayResult.length==0)
// Your code here
else
// Show results
【讨论】:
Sdghasemi,谢谢!以上是关于在 AsyncTask 完成后做某事的主要内容,如果未能解决你的问题,请参考以下文章