Java 如何在内部AsyncTask类的doInBackground之外调用外部类函数?

Java 如何在内部AsyncTask类的doInBackground之外调用外部类函数?,java,android,android-asynctask,Java,Android,Android Asynctask,我还没有找到任何方法来解决我的问题。。。我必须从内部类中调用外部类方法。这是我的代码(简称): 如果不调试,应用程序只会崩溃(调用外部类方法)。您只能在Asynctask.onPostExecute方法中调用外部类方法。这是因为doInBackground方法实际上是另一个线程,所以可以将其视为完全位于另一个类中 查看开发者文档或在线提供的优秀教程 在您的情况下,而不是: private class BgTasks extends AsyncTask<Void, Void, Void>

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


如果不调试,应用程序只会崩溃(调用外部类方法)。

您只能在Asynctask.onPostExecute方法中调用外部类方法。这是因为doInBackground方法实际上是另一个线程,所以可以将其视为完全位于另一个类中

查看开发者文档或在线提供的优秀教程

在您的情况下,而不是:

private class BgTasks extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(String... params) {

        bgTasksFinished(doneTask, result); // outer class method
    }
}
私有类BgTasks扩展了异步任务{
@凌驾
受保护的Void doInBackground(字符串…参数){
bgTasksFinished(顿涅茨克,结果);//外部类方法
}
}
尝试:

私有类BgTasks扩展了异步任务{
@凌驾
受保护字符串doInBackground(无效…参数){
返回顿涅茨克;
}
@凌驾
PostExecute上受保护的void(字符串doneTask){
bgTasksFinished(顿涅茨克,结果);//外部类方法
}
}

您遇到了什么问题?我认为您可以创建新类(外部类)并正常调用它的方法或函数。或者您将外部类的方法设置为静态方法来直接调用(不是新类)。非常感谢,但是。现在看起来是这样的:
@Override protected Integer doInBackground(String…params){
然后
@Override protected void onpostsecute(int result){
但是显示了一个错误:
方法onpostsecute(int)类型为FileBrowser.BgTasks必须重写或实现超类型方法
您还需要将私有类BgTasks extends AsyncTask更改为私有类BgTasks extends AsyncTask,这已经是正确的。Void、Void、Void仅用于在此处发布。我已经解决了问题(并发现了另一个问题)。
PostExecute上受保护的Void(int result)
错误。正确的方法是:
受保护的void onPostExecute(Integer result)
。Eclipse现在看不到任何错误,但从未调用onPostExecute。调试时,Eclipse表示:找不到源代码。这可能会泄漏吗?
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)
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
    }
}