AsyncTask onPostExecute不会返回上一个活动

时间:2011-08-14 22:48:50

标签: android asynchronous android-3.0-honeycomb

我正在使用两个AsyncTasks,一个在FragmentActivity中返回一个对话框后被调用,并且在我调用的.execute之后有代码。另一个.execute仅在if...else中调用。在另一个对话框返回之后调用的那个,执行它应该执行的操作,执行它,在执行后它将活动弹回到前一个,一切正常。

另一个onPostExecute从未被调用过。我在执行并返回null的doInBackground中执行了一个断点,就像其他人一样,但onPostExecute从未发生过,在一个FragementActivity中有太多的AsyncTasks,或执行的调用太多都有问题?我被困住了,并希望它有些愚蠢,我只是没有看到,所以我发布了代码,但我真的无法弄清楚为什么onPostExecute永远不会在AddEventWorker中调用,而是在AddEventFromDialogWorker中调用。我测试应用程序的方式就是这样,AddEventFromDialogWorker被调用,工作,然后AddEventWorker的任何东西都不起作用(确实是doInBackground而不是onPostExecute)。

我可以尝试任何想法或途径吗?

 private class AddEventWorker extends AsyncTask<Void, Void, Void>{
             protected void onPostExecute() {
                 getFragmentManager().popBackStack();
                }
            @Override
            protected Void doInBackground(Void... params) {
                mGoogleApi.addEvent(mSession, allGoogleAccounts.get(0).getGoogleCalendarName());
                return null;


            }         
        }

         private class AddEventFromDialogWorker extends AsyncTask<String, Void, Void>{
             protected void onPostExecute() {
                 Toast.makeText(mContext, "Event added to google calendar!", Toast.LENGTH_SHORT);
                 getFragmentManager().popBackStack();
                }
            @Override
            protected Void doInBackground(String... params) {
                mGoogleApi.addEvent(mSession, params[0]);
                return null;
            }         
        }

1 个答案:

答案 0 :(得分:3)

永远不会调用onPostExecute()方法,因为您没有覆盖基类的onPostExecute()方法。签名应该受保护void onPostExecute(Void结果)。如果您使用@O​​verride,编译器会告诉您有关此问题的信息:)