我是android中的新手。 我在会话中保持登录用户的数据,并在启动应用程序时将其从登录屏幕重定向到MainActivity。 我在登录活动的onCreate方法中使用了类似的方法:

if(session.isLoggedIn()) {
            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }

用户一直保持登录状态,直到单击注销并运行session.logoutUser();为止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中升级,或在onUpgrade()方法中运行session.logoutUser() 感谢帮助。

===============>>#1 票数: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;
    }
}

因此,我可以通过对LoginActivity进行如下更改来检查数据库是否已升级:

    if (!MySQLiteHelper.db_upgrade) { // if db is not upgraded
        if (session.isLoggedIn()) {
            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    }

  ask by samet translate from so

未解决问题?本站智能推荐:

1回复

在会话中保存数据库排序

感谢stackoverflow的人们,我已经在几天内掌握了使用php的数据库(sqlite)控件的大多数方面! 并设法建立一个基本的crud cms。 我现在正在做一些小改进,坚持“在会话中保存数据库排序”。 当我单击页面然后返回时,会话不会保存。 到目前为止,这似乎是一个令人沮丧的绊脚
2回复

在数据库中插入新元素时,sqlite异常

我在android中使用sqlite出现此错误 android.database.sqlite.SQLiteException:表格老师没有名为password(代码1):的列,而在编译时:INSERT INTO Teacher(name,email,password,id)VALUE
2回复

Android:如何从SQLite数据库中将userID调用并保存为会话?

在我的应用程序中,我试图弄清楚如何保存userID会话并使用它,直到用户关闭该应用程序为止。 我知道在PHP中您可以只使用$ _SESSION ['userID'] = $ user_id 我想在Android SQLite中运行类似这样的查询 这是从php传来的,有什么方法
2回复

升级我的数据库

我的应用程序上有一个数据库,但是有两个问题: 数据库名称与我写的不对应: 一个错误: 我的代码: 错误说我的数据库名称是= google_analytics_v4.db,但是在我的代码DATABASE_NAME =“ Solutis”中。 我的第二个问
2回复

如何在会话中存储数据

这个问题已经在这里有了答案 : 5个月前关闭。 非注册用户的购物车 (6个答案) 我有疑问将数据存储在数据库中而无需像电子商务应用程序那样登录。 在后
1回复

如何升级sqlite数据库?

我的应用程序中有一个sqLite数据库,可存储高分。 我最近添加了一个新列(级别),并且需要升级数据库,否则应用程序将崩溃。 如果我手动删除.db文件,效果很好。 我试图增加数据库版本,但是没有用。 那怎么办呢? 这是我的sqlite助手类: } 添加/更改需要什么?
1回复

SQLite数据库升级条件

我有一个Android报价应用程序,其中使用SQLite数据库存储报价。 我已经使用此DatabaseHelper启动了该应用程序的第一个版本。 我的数据库活动是: 现在,如果我想用更多的引号更新应用程序,我应该进行哪些更改,以便新老用户都不会遇到任何问题? 我知道应该增
2回复

无法升级数据库

以下是我的数据库代码,我试图通过更改版本号对其进行升级,但是运行表时未在重新创建或更改...代码plz帮助中有任何错误
2回复

登录时用户出现错误,但他不在数据库中

当我尝试使用错误的凭据登录时出现错误,我期望会收到吐司错误,即错误的凭据输入了错误,但崩溃了。 我认为我的数据库助手在找不到用户的email_phone和密码时停止。 并不会在我的错误登录活动中发送任何拒绝功能。 什么是否认功能或我缺少的东西 这是我的logcat 我
1回复

在数据库中插入行时出现空指针异常

我正在尝试设置一个基本的SQLite数据库并将一行插入其中。 当我尝试插入一行时,我的应用程序失败。 我在调用周围放置了一个try catch块,发现它是一个空指针异常。 看来我的数据库从未创建过。 我在代码的顶部调用了创建数据库的对象,所以我不知道为什么没有创建它。 这是我尝试创建和