调用Android的getSharedPreferences()的问题; 来自SQLiteOpenHelper类

j7n*_*n7k 3 database android android-preferences

首先,我想简要描述一下我的情况.

我有两个类,一个MainClass和一个DataBaseHelper类,它们扩展了SQLiteOpenHelper.

在我的MainClass中,我调用DataBaseHelper类中的方法来打开数据库.在打开数据库之前,我想检查用户数据库版本(一旦我想更新数据库并将其推送到Android市场,这一点很重要).所以从DataBaseHelper类我调用以下方法,它在MainClass中.

 public int checkCurrentDbVersion(){
        // Restore preferences
        SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);
        int dbUpgradeVar = settings.getInt("dbUpgradeVar", 1);
        return dbUpgradeVar;        
    }
Run Code Online (Sandbox Code Playgroud)

我从DataBaseHelper类调用checkCurrentDbVersion()方法,如下所示:

    MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion();
Run Code Online (Sandbox Code Playgroud)

一旦调试器运行以下行,它就会停止.

SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我没有定义构造函数.这可能是失败吗?

最好的问候Johe

j7n*_*n7k 9

我找到了一个解决方案,我想分享一下.在这里能找到它:

通过意图而不是构造函数传递数据

我忘记了上下文(我仍然不能100%确定上下文是什么,但无论如何......).

所以为了让代码工作,我改变了它:

 public int checkCurrentDbVersion(Context context){
        // Restore preferences
        SharedPreferences settings = context.getSharedPreferences(PREFERENCES, 0);
        int dbUpgradeVar = settings.getInt("dbUpgradeVar", 1);
        return dbUpgradeVar;        
    }
Run Code Online (Sandbox Code Playgroud)

调用方法

private final Context myContext;

/*
*do some other stuff here
*/

    MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion(myContext);
Run Code Online (Sandbox Code Playgroud)