java - AsyncTask "onPostExecute"永远不会被调用

标签 java android multithreading android-asynctask

我搜索了所有具有几乎相同问题的帖子,但找不到任何有用的内容:\

我创建了一个自己的接口(interface)来在我的 MainActivity 中实现“TaskListener”。我的想法是在 AsyncTask 完成后在主线程中运行 onTaskComplete() 方法。

我的界面:

public interface TaskListener {
    void onTaskComplete();
}

我的主要 Activity :

public class MainActivity extends Activity implements TaskListener{
      private MyAsyncTask myAsyncTask;

      protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);

           myAsyncTask = new MyAsyncTask(this);
           //Some other stuff here
      }

      private void aMethod(){
          myAsyncTask.execute(aString);//aString is of course defined
      }

      public void onTaskComplete(){
          MyClass tmpMyObject = null;
          try{
              tmpMyObject = myAsyncTask.get();
          }
          catch(Exception e){
              //...
          }
      }
}

MyAsyncTask:

public class MyAsyncTask extends AsyncTask<String, Void, MyClass>{
      private TaskListener taskListener;

      public MyAsyncTask(TaskListener taskListener){
           this.taskListener = taskListener;
      }

      protected MyClass doInBackground(String... aString){
           //Some code here
           MyClass myObject = new MyClass();
           return myObject;
      }

      @Override
      protected void onPostExecute(MyClass myObject){
           taskListener.onTaskComplete();
      }
}

如果我运行我的应用程序,它会在 doInBackground() 返回 myObject,但 onPostExecute() 永远不会被调用。所以我在 MainActivity 中尝试了一些类似的事情:

private void aMethod(){
      MyClass myObject = myAsyncTask.execute()
                                    .get();
}

使用此代码,将调用 onPostExecute()。但这样我的主线程必须等待异步线程完成..

非常感谢

最佳答案

你能解释一下为什么你认为你的 onPostExecute 没有被调用吗?

我一直用这个,从来没有遇到过任何问题。尝试以下方法。

@Override
protected void onPostExecute(MyClass myObject) {
    super.onPostExecute(myObject);
    // LOG some message or put a break point to see if you get called
    taskListener.onTaskComplete(myObject);
}

更改您的界面以接受 MyClass 作为参数。

 public void onTaskComplete(MyClass myObject){
  // Do whatever you need to do with myObject
    // LOG some message or put a break point to see if you get called

  }

关于java - AsyncTask "onPostExecute"永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918912/

相关文章:

java - `Can' t 在继承的 Activity 中创建处理程序...Looper.prepare()`

java - 安卓系统错误: Cannot find symbol method

java - 如何将图像从android发送到servlet然后存储

android - 播放 mp3 歌曲时突出显示歌词(同步形式)

android - SQLite 数据库、多线程、Android 上的锁和帐户同步

Android - 跟踪线程

multithreading - 100% 使用某些内核是否会影响在 Linux 中不同内核上运行的进程(C++,多线程)的性能?

java SimpleDateFormat - Postgres "timestamp with timezone"日期格式的正确格式

java - 如何在4秒内定时生成不同的随机数?

java - 缺少服务器异常 Spring Boot