无法从静态上下文引用非静态方法execute()

时间:2015-07-16 21:14:05

标签: java android

我不明白为什么我收到这个编译错误;这里涉及的任何类或方法都不是静态的。也许有人可以在这里说清楚。

在我的MainActivity类中,我声明了一个扩展AsyncTask的公共类:

public class AsyncStuff extends AsyncTask<String, Void, String> {
    ...
}

在我的非活动类中,我有一个应该触发异步任务的公共函数:

public class Util {
    public void ExecuteAsyncMethod(){
        MainActivity.AsyncStuff.execute(new String[]{"test" }); // error here
    }
}

我还尝试实例化MainActivity.AsyncStuff类的对象并执行其execute()方法,但这不起作用,因为它不在封闭类中。我无法将其移动到其他地方,因为我需要更新UI,因此需要保留在MainActivity类中。

无论如何,我需要帮助来弄清楚为什么我的ExecuteAsyncMethod()方法不能编译。

谢谢!

2 个答案:

答案 0 :(得分:6)

像这样定义:

public static class AsyncStuff extends AsyncTask<String, Void, String> {
    ...
}

并按照以下方式运行:

public class Util {
    public void ExecuteAsyncMethod(){
        new AsyncStuff().execute(new String[]{"test" });
    }
}

答案 1 :(得分:4)

您收到该错误的原因是您必须实例化AsyncTask,而您正试图调用execute(),就像它是静态方法一样。

至于你是否可以移动你的AsyncTask,是的,你可以,只是让这个类静态(或者让它完全属于自己的类),并且对活动的参考很弱,所以你不要如果它在AsyncTask之前完成,请将其保留在RAM中。无论您是否将其保留在MainActivity内,您都希望这样做。