java - 登录后在类之间使用 session 变量 - 空对象引用

标签 java android sqlite session

我创建了一个应用程序,您可以在其中使用 SQLite 登录,并检查数据库中是否有匹配的用户。

我已经成功登录,并且在用户登录后将 boolean 变量设置为 true,但我试图弄清楚如何将其传递回 MainActivity.java 来自 onResume() 方法中的 Login.java

这是来自 Login.java 的代码,我将 session 设置为 true,然后使用 putExtra 将其发送回 MainActivity。

public void onClick(View v) {
                String username = usernameET.getText().toString();
                String password = passwordET.getText().toString();  
                boolean success = db.Login(username, password);       

                if(success)
                {
                    Log.d("login", "user logged");                  
                    session = true;                     
                    Intent i = new Intent(Login.this, MainActivity.class);
                    i.putExtra("loginSuccess", session);
                    i.putExtra("sessionName", username);
                    startActivity(i);

                }
                else
                {
                    Log.d("login", "user not logged");
                }
            }

这里是 onResume() 方法中 MainActivity.java 的代码。 if 语句是错误所在,我只想知道如何让我的应用程序识别 boolean 值,以便它知道用户在返回主页时已登录,并存储用户名以便我可以加载用户信息取决于登录者。

protected void onResume() {
    super.onRestart();
    Log.d("On Restart", "ON RESTART CALLED");
    boolean sessionBool = false;
    if (sessionBool = getIntent().getExtras().getBoolean("loginSuccess"))
    {
        sessionBool = true;
        String sessionNamestring = getIntent().getStringExtra("sessionName");
        Log.d("Session Name", sessionNamestring);

    }
    else
    {
        sessionBool = false;
    }

Logcat

02-21 00:54:29.174: E/AndroidRuntime(2563): FATAL EXCEPTION: main
02-21 00:54:29.174: E/AndroidRuntime(2563): Process: com.example.project, PID: 2563
02-21 00:54:29.174: E/AndroidRuntime(2563): java.lang.RuntimeException: Unable to resume activity {com.example.project/com.example.project.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Bundle.getBoolean(java.lang.String)' on a null object reference
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2989)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3020)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.ActivityThread.access$800(ActivityThread.java:151)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.os.Handler.dispatchMessage(Handler.java:102)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.os.Looper.loop(Looper.java:135)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.ActivityThread.main(ActivityThread.java:5257)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at java.lang.reflect.Method.invoke(Native Method)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at java.lang.reflect.Method.invoke(Method.java:372)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
02-21 00:54:29.174: E/AndroidRuntime(2563): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Bundle.getBoolean(java.lang.String)' on a null object reference
02-21 00:54:29.174: E/AndroidRuntime(2563):     at com.example.project.MainActivity.onResume(MainActivity.java:64)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1257)
02-21 00:54:29.174: E/AndroidRuntime(2563):     at android.app.Activity.performResume(Activity.java:6076)

最佳答案

如果您需要在其他 Activity 中使用此 session 怎么办!您需要再次额外发送!所以,我建议使用sharedprefrences并存储您的凭据( session ),无论您在哪里,都可以从共享中获取 session 并使用它

关于java - 登录后在类之间使用 session 变量 - 空对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35531071/

相关文章:

javascript - SQL.js(SQLite JavaScript 实现)可以立即自动写入磁盘吗?

objective-c - 锁定等待@synchronized

Java/安卓 : SQLite or file for indexing?

java - 错误 backtype.storm.daemon.executor - java.lang.NoClassDefFoundError : org/I0Itec/zkclient/serialize/ZkSerializer

java - Spring-Data-JPA分页

java - 为什么 hibernate 创建空外键?

android - 如何搜索搜索字符串中的任何字符?

java - findViewById 在 Fragment 而不是在 (On)CreateView

ruby-on-rails - SQLite/Rails 日期时间查询问题

android - 如何使用一个后台服务启动不同的 Activity