我还没有找到任何方法来解决我的问题......我必须从内部类中调用外部类方法。这是我的代码(缩写):
public class FileBrowser extends ListActivity implements OnClickListener {
public void bgTasksFinished(String doneTask, int result) {
switch(doneTask) {
case doEncrypt:
doSomething();
break;
case doDecrypt:
doAnotherThing();
break;
}
private class BgTasks extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(String... params) {
bgTasksFinished(doneTask, result); // outer class method
}
}
}
...但这行不通。
在调试时我得到这个(以及其他):
01-10 18:34:10.357: E/AndroidRuntime(29038): FATAL EXCEPTION: AsyncTask #1
01-10 18:34:10.357: E/AndroidRuntime(29038): Process: de.zpit2u.crypt, PID: 29038
01-10 18:34:10.357: E/AndroidRuntime(29038): java.lang.RuntimeException: An error occured while executing doInBackground()
01-10 18:34:10.357: E/AndroidRuntime(29038): at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-10 18:34:10.357: E/AndroidRuntime(29038): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
如果不调试应用程序只会崩溃(调用外部类方法)。
最佳答案
您只能在 Asynctask.onPostExecute 方法中调用外部类方法。这是因为 doInBackground 方法实际上是另一个线程,因此您将其视为完全在另一个类中。
在你的情况下而不是:
private class BgTasks extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(String... params) {
bgTasksFinished(doneTask, result); // outer class method
}
}
尝试:
private class BgTasks extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
return doneTask;
}
@Override
protected void onPostExecute(String doneTask) {
bgTasksFinished(doneTask, result); // outer class method
}
}
关于java - 如何在内部 AsyncTask 类中从 doInBackground 调用外部类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708371/