java - 如何在内部 AsyncTask 类中从 doInBackground 调用外部类函数?

标签 java android android-asynctask

我还没有找到任何方法来解决我的问题......我必须从内部类中调用外部类方法。这是我的代码(缩写):

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 方法实际上是另一个线程,因此您将其视为完全在另一个类中。

查看开发人员文档或 onemany在线提供优秀教程。

在你的情况下而不是:

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/

相关文章:

java - AsyncTask 不返回 TreeMap

java - 在java中对数组进行排序

android - Xamarin 是 Android 和 IOS 长期运行服务的正确选择吗

java - Android Studio 表格布局中增加列

java - 如何在android中从java获取变量值到xml文件?

android - 哪些 Android 设备/版本组合支持/不支持浏览器中的多点触控手势?

android - Asynctask vs 线程 vs 服务 vs 加载器

android - 从 Activity 的 OnCreate 启动的 AsyncTask,仅当此类 AsyncTask 当前未运行时。我该如何实现这个?

java - 没有 fragment 的滑动菜单

java - 通过传递URL参数在Webview中打开页面