无法获得AsyncTask的结果

时间:2013-08-01 14:24:12

标签: java android

我有一个与MainActivity分开的AsyncTask类。

protected void onPostExecute(ArrayList<String> result) {
          System.out.println("flag1");
          MainActivity.myLst=new ArrayList<String>();
          MainActivity.myLst=result;
}

然后我在MainActivity中有以下代码。

public void onCreate(Bundle savedInstanceState) {
    new AsyncTask().execute();
    System.out.println("flag2");
    System.out.println(myLst.size());
}

程序首先输出flag2,myLst.size为0.如果我对其他活动否定,然后返回主活动,myList.size的大小正确。我认为它应该输出所有内容并在MainActivity之前在AsyncTask中完成工作。

5 个答案:

答案 0 :(得分:3)

AsyncTask不会“在MainActivity之前完成工作”,这会破坏AsyncTask的目的。

您要做的是编写一个接口,将值传递回您的Activity。 This answer就是一个很好的例子。

答案 1 :(得分:3)

您正在创建一个AsyncTask以异步方式执行操作。

你要对另一个线程说它有工作要做,但你不是在等他的结果来做你的,这就是为什么“flag2”是在另一个之前写的。

如果您想等待结果,则需要在onPostExecute()

中实施回调

答案 2 :(得分:1)

异步意味着它可能出现故障。异步任务经常启动另一个线程,该线程在主线程中并行或在后台执行工作。绝对不能假设execute()返回时将完成异步任务!

答案 3 :(得分:1)

就像其他人所说的那样,我在你的帖子的评论中说过,async意味着异步,在你的情况下意味着它可能会在完成异步任务之前完成onCreate代码。

将AsyncTask类放在MainActivity中(并调用一些方法在PostExecute上打印),或在活动中实现Observing / Observer样式,以便能够通知主活动异步任务已结束。

答案 4 :(得分:1)

您可以在调用Asynctask的代码中覆盖onPostExecute()方法。

例如,您有一个名为myAsyncTask的AsyncTask。然后在你的Activity中这样做:

new myAsyncTask() {

        @Override
        protected void onPostExecute( Result result ) {

            super.onPostExecute( result );
            // Do something with result here
        }
    }.execute(value1);

我有同样的问题,我想把结果放在一个片段里面.... 看看这个topic