我有一个与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中完成工作。
答案 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