首先,我想简要描述一下我的情况。
我有两个类,一个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);
我做错了什么?我没有定义构造函数。这可能是失败吗?
最诚挚的问候 Johe
答案 0 :(得分:9)
我找到了一个解决方案,我想分享一下。它可以在这里找到:
Passing data through intents instead of constructors
我忘记了上下文(我仍然不能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);
答案 1 :(得分: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);