我想创建一个包含应用程序关键值的类,以便我可以在所有活动中共享和访问它们。这就是我到目前为止所做的:
我定义了一个这样的类:
public class GlobalVars {
public static String str1;
public static String str2;
public static Integer int1;
public static Integer int2;
public static MyDBAdapter myDBAdapter;
public static Boolean isOK1() {
return str1.length() > 3;
}
}
这是我在应用程序开头填写它们的方式:
private void getAllInfo() {
// first get the info
Cursor appCursor = cursor;
GlobalVars.str1 = appCursor.getString(appCursor
.getColumnIndexOrThrow(MyDBAdapter.KEY1));
if (GlobalVars.str1 != null) {
} else {
GlobalVars.str1 = "";
}
GlobalVars.int1 = appCursor.getInt(appCursor
.getColumnIndexOrThrow(MyDBAdapter.KEY_NUMBER1));
if (GlobalVars.int1 != null) {
} else {
GlobalVars.int1 = 1;
}
我通常只需写
即可访问这些值GlobalVars.int1 = ...
或
i = GlobalVars.int1;
我需要的地方
在应用程序结束时,我将所有值都放回数据库中。
这是以这种方式处理全局变量的最佳方法吗?
我得到了非常奇怪的NullPointerException与获得应用程序的用户访问GlobalVars.int1变量时出错 - 而我是100%时,值总是正确分配,而且永远不会为null。
在使用之前我是否必须分配GlobalVars对象? 有没有可能的解释,如果没有我在任何地方分配null,这些值如何变为空?
由于
答案 0 :(得分:1)
Android中有一个名为SharedPreferences
的概念,它允许存储原始值并从应用程序的每个活动中访问它们。您可以在此处找到更多信息:http://developer.android.com/guide/topics/data/data-storage.html#pref
我认为这比只有静态变量的类更可取。您可以在关于DataStorage的API章节中找到一些其他有趣的想法,特别是关于持久性数据库访问。
类中的值为null
,因为这是所有对象引用的默认值。因此,如果您使用的是Integer
而不是int
,则默认值为null
,而不是 - 正如预期的那样 - 0
。
答案 1 :(得分:1)
我建议使用共享首选项进行配置/共享数据存储(只要你有合理数量的存储 - 数据库可能无限量)
我在依赖注入器上处理首选项(从首选项设置值已经工作): https://github.com/ko5tik/andject
至于你关于空值的问题 - 如果你没有分配它,它就是空