我需要在我的应用程序中存储一些数据。 我知道我可以这样做:
类:
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扩展的课程中,我如何访问我的数据?
提前感谢您的帮助!
答案 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)
使用SharedPreferences
http://developer.android.com/guide/topics/data/data-storage.html
答案 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);
// ...