创建一个类作为应用程序的多个活动中使用的变量的全局存储库

时间:2011-11-04 09:28:17

标签: android global-variables

我想创建一个包含应用程序关键值的类,以便我可以在所有活动中共享和访问它们。这就是我到目前为止所做的:

我定义了一个这样的类:

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,这些值如何变为空?

由于

2 个答案:

答案 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

至于你关于空值的问题 - 如果你没有分配它,它就是空