[英]AsyncTask “onPostExecute” never gets called
我在所有帖子中搜索了几乎相同的问题,但找不到任何有用的信息:\\
我创建了自己的接口,以在MainActivity中实现“ TaskListener”。 我的想法是在AsyncTask完成后在主线程中运行onTaskComplete()
方法。
我的界面:
public interface TaskListener {
void onTaskComplete();
}
我的主要活动:
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
}
之所以不调用它,是因为您没有将其传递给接口的回调方法。此外,get方法还将使您的主线程和后台线程同步。因此它将等待后台线程完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.