会话在DB升级时返回null异常

时间:2014-04-20 15:32:21

标签: android database sqlite session

我是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()。谢谢你的帮助。

1 个答案:

答案 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();
        }
    }