我还没有找到解决问题的方法......我必须从内部类中调用外部类方法。这是我的代码(缩写):
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)
不调试应用程序只会崩溃(调用外部类方法)。
答案 0 :(得分:1)
只能在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
}
}