【问题标题】:Non-static method execute() cannot be referenced from a static context不能从静态上下文引用非静态方法 execute()
【发布时间】:2015-07-16 21:14:04
【问题描述】:

我不明白为什么会收到此编译错误;我这里涉及的所有类或方法都不是静态的。也许有人可以在这里有所启发。

在我的 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() 方法无法编译。

谢谢!!

【问题讨论】:

标签: java android


【解决方案1】:

这样定义:

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

然后像这样运行:

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

【讨论】:

  • 如果我这样做,我不能在我的 onPostExecute() 中引用非静态变量。有什么解决办法吗?
  • 要引用非静态变量,请使用普通的 Java 习惯用法:将它们传递给 ExecuteAsyncMethod(),然后传递给 AsyncStuff() 构造函数,并将它们存储在成员变量中。然后你可以访问onPostExecute()中的值。
  • 我最终解决了我的问题。我在某处犯了一个愚蠢的语义错误。这行得通。谢谢。
【解决方案2】:

你得到这个错误的原因是你必须实例化你的AsyncTask,你试图调用execute(),就好像它是一个静态方法一样。

至于您是否可以移动您的AsyncTask,是的,您可以,只需将类设为静态(或将其完全设为自己的类)并对活动进行弱引用,因此您不要将其保存在 ram它应该在您的AsyncTask 之前完成吗?无论您是否将其保存在 MainActivity 中,这都是您想要做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2023-03-31
    • 2013-04-05
    相关资源
    最近更新 更多