3

首先我想简单描述一下我的情况。

我有两个类,一个 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;        
    }

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

    MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion();

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

SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);

我究竟做错了什么?我没有定义构造函数。会不会是失败?

最好的问候乔赫

4

2 回答 2

10

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

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

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

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

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

调用方法

private final Context myContext;

/*
*do some other stuff here
*/

    MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion(myContext);
于 2010-02-27T00:52:39.173 回答
0

这是我的解决方案 1.我的应用程序无法使用。

import androidx.appcompat.app.AppCompatActivity;

SharedPreferences settings = new AppCompatActivity().getSharedPreferences(PREFERENCES, 0);

2.在我的应用程序中运行良好

    public static boolean isLoggedIn(AppCompatActivity activity) {
        final SharedPreferences loggedSP = activity.getSharedPreferences(SP_name.get_Logged_SPname(), MODE_PRIVATE);
        return loggedSP.getBoolean(SP_name.get_Logged_SPkey(),false);
    }

在我的主要活动中执行它

boolean a = LoginRepository.isLoggedIn(this);
于 2020-02-06T11:43:25.660 回答