在 AsyncTask 完成后做某事

Posted

技术标签:

【中文标题】在 AsyncTask 完成后做某事【英文标题】:Doing something after AsyncTask finishes 【发布时间】:2020-10-27 11:39:22 【问题描述】:

我正在开发一个使用 Jsoup 检索网页内容的 android 应用程序。为了执行此操作,我使用了单独的 AsyncTask 类。我需要在AsyncTasks 完成后显示检索到的结果。 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】:

AsyncTasks 顾名思义,您是否异步工作,这意味着对 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 完成后做某事的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery 中发生事件后做某事?

Android攻城狮AsyncTask

Android Shaking 在 3 秒后做某事

互联网连接可用后做某事的最佳方法

AsyncTask介绍

用于图像获取的AsyncTask不断被调用