无法从静态上下文

时间:2015-07-01 20:19:39

标签: java android

我正在尝试从另一个Java文件访问一个方法,该方法更改UI中的文本字段。 在Game.java(后台的普通Java文件)中,我有一些随时间变化的静态变量。我希望这些变量的更改能够反映在实际的UI中。因此,我试图访问DisplayMessageActivity.java中的方法“changeName”,它将反映相应的更改(display_message_activity.xml)。

这是我试图从Game.java调用的DisplayMessageActivity.java中的方法

public void changeName() {
    TextView text = (TextView) findViewById(R.id.petname);
    text.setText("" + Game.name);
}

要从Game.java调用DisplayMessageActivity.changeName(),我必须将其更改为静态方法。

public static void changeName() {
    TextView text = (TextView) findViewById(R.id.petname);
    text.setText("" + Game.name);
}

但这样做会给我一个错误“无法从静态上下文访问非静态方法”for“findViewByID”。 我甚至尝试在Game.java中创建一个DisplayMessageActivity.java实例来访问“changeName”方法而不使其成为静态。但是,它会在TextView text = (TextView) findViewById(R.id.petname);

处抛出nullPointerException

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

自行创建DisplayMessageActivity的静态引用,并在onCreate()中初始化。

public class DisplayMessageActivity {
DisplayMessageActivity instance;

    @Override
    public void onCreate() {
        ...
        instance = this;
        ...
    }

}

然后从Game.java您可以使用以下方法访问非静态方法:

DisplayMessageActivity.instance.changeName();

编辑:顺便说一下,您的NPE正在被抛出,因为您创建了一个新的DisplayMessageActivity实例,而不是您实际使用的实例。