我不明白为什么我收到这个编译错误;这里涉及的任何类或方法都不是静态的。也许有人可以在这里说清楚。
在我的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()方法不能编译。
谢谢!
答案 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
内,您都希望这样做。