我是android的新手。我在会话中保持登录用户的数据,并在应用程序启动时将它们从登录屏幕重定向到MainActivity。我在登录活动的onCreate方法中使用类似的东西:
if(session.isLoggedIn()) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
用户保持登录状态,直到点击退出并运行session.logoutUser();
,其工作方式如下:
public void logoutUser(){
// Clearing all data from Shared Preferences
editor.clear();
editor.commit();
// After logout redirect user to Login Activity
Intent i = new Intent(_context, LoginActivity.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
_context.startActivity(i);
}
问题在于,当我在MySQLiteHelper类中进行数据库升级时,session.isLoggedIn()
仍然返回true。因此,LoginActivity一直在尝试重定向用户,而应用程序在MainActivity中提供nullpointerexception
。
我需要在重定向到MainActivity之前检查数据库是否在LoginActivity中升级,或者在session.logoutUser()
方法中运行onUpgrade()
。谢谢你的帮助。
答案 0 :(得分:0)
我在MySQLiteHelper.java类中定义了一个公共布尔变量,如
public boolean db_upgrade = false;
并更改了onUpgrade()方法,如:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older tables if existed
db.execSQL("DROP TABLE IF EXISTS Players");
db.execSQL("DROP TABLE IF EXISTS Foods");
// create fresh tables
this.onCreate(db);
if(oldVersion != newVersion) {
db_upgrade = true;
}
}
因此,我可以检查db是否升级,并在LoginActivity上稍作更改:
if (!MySQLiteHelper.db_upgrade) { // if db is not upgraded
if (session.isLoggedIn()) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}