Android - 全局变量?

时间:2011-12-28 17:09:08

标签: android global-variables

我需要在我的应用程序中存储一些数据。 我知道我可以这样做:

类:

public class MyApplication extends Application {

    private String someVariable;

    public String getSomeVariable() {
        return someVariable;
    }

    public void setSomeVariable(String someVariable) {
        this.someVariable = someVariable;
    }
}

实现:

MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getSomeVariable();

如果我参加活动,这是有效的。

但如果我在没有从Activity扩展的课程中,我如何访问我的数据?

提前感谢您的帮助!

6 个答案:

答案 0 :(得分:5)

您可以使用Singleton设计模式。然后您可以在任何地方使用它,因为它具有静态访问权限。

public class SingletonClass {
private static SingletonClass _instance = null;
private int _value = 0;

private SingletonClass() {
}

public static SingletonClass getInstance() {
    if (_instance == null)
        _instance = new SingletonClass();
    return _instance;
}

public int getValue() {
    return _value;
}

public void setValue(int value) {
    _value = value;
}

}

然后像这样访问它:

SingletonClass.getInstance().getValue();

注意:对于某些编程问题,这是一个很好且简单的解决方法,但是非常明智地使用它...它带来了它的问题

答案 1 :(得分:3)

答案 2 :(得分:1)

也许通过构造函数或特殊setter注入类数据所需的全部内容,我建议使用前者。 (Constructor Injection vs. Setter Injection

还有更多的解决方案,比如静态字段,但我个人不喜欢这种方法,因为静态有时会使单元测试有点混乱。

BTW,你想分享什么样的变量?

答案 3 :(得分:0)

我使用,对某些人来说可能是可怕的,这是一个带有静态变量的类,你可以从app中的每个类中检索它。

只需创建一个包含所有字段为静态的类,您就可以在整个应用中使用它们。只有在停止应用程序时才会删除它。

您也可以将静态变量添加到应用程序类中。

答案 4 :(得分:0)

您可以使用静态方法(如果它们是公共的,则使用变量)。这真的有点乱,但如果你以正确的方式将它们(方法)分组,你将获得幸福和满足感。

static public int getSomeInt(){
     //something
}

然后在你的应用中的任何地方使用

int x=MyApplication.getSomeInt();

顺便说一句,使用这种样式,您不需要扩展Application类。为此目的创建一个抽象类更好。

答案 5 :(得分:0)

将您活动的上下文作为参数传递给方法或类:

// ...
public void doStuff(Context context) {
    // for example, to retrieve and EditText
    EditText et = context.findViewById(R.id.editText1);
}

然后,在你的活动中,你会这样做:

// ...
MyClass myClass = new MyClass();
// ...
myClass.doStuff(this);
// ...