如何在共享首选项中存储登录状态

时间:2020-01-28 12:07:44

标签: java android sharedpreferences android-studio-3.0

我正在制作一个Android应用,并在我的应用中添加了存储登录状态的功能。

我的启动画面:

public class Splash extends AppCompatActivity {
     private SharedPreferences preferences;
     public int a = 0;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_splash);
         final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressbar);
        new CountDownTimer(5000, 1000) {
             @Override
             public void onTick(long millisUntilFinished) {
                 a = a + 1;
                 progressBar.setProgress(a);
             }

             @Override
             public void onFinish() {
                 SharedPreferences preferences = getSharedPreferences("login", MODE_PRIVATE);
                 String check = preferences.getString("login", "off");
                 if (check.equals("on")) {
                     startActivity(new Intent(Splash.this, Menu.class));
                 } else {
                     startActivity(new Intent(Splash.this, LoginPage.class));
                 }
             }
         }.start();
     } }

我的登录屏幕:

public class LoginPage extends AppCompatActivity {
     private SharedPreferences preferences;
     Context context;
     Button login, register, database;
     EditText username;
     EditText password;
     TextView msg;
     MyDBManager db;

     static final int REGISTRATION_REQUEST = 1;  // The request code

     @Override
     protected void onCreate(final Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.loginpage);
         db = new MyDBManager(this);

         msg = (TextView) findViewById(R.id.msg);
         login = (Button) findViewById(R.id.button);
         register = (Button) findViewById(R.id.button2);
         database = (Button) findViewById(R.id.button3);
         username = (EditText) findViewById(R.id.user);
         password = (EditText) findViewById(R.id.pass);
         // Click and move to the next activity
         login.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 db.open();
                 Cursor c = db.getUser(username.getText().toString(), password.getText().toString());

                 if (c.moveToFirst()) {
                     db.close();
                         context.startActivity(new Intent(context,Menu.class));
                     //                    Intent i=new Intent(getApplicationContext(),Menu.class); //                        
 i.putExtra("Username", username.getText().toString()); //             
 startActivity(i); // call Login Activity
                    Store();
                 }
                 else
                 {
                     db.close();

                     // set error message when the username and/or password is not valid
                     msg.setText("Unable to login: wrong username or password!");
                     // Stay at the current activity.
                 } 
             }

             private void Store() {
                 SharedPreferences preferences=context.getSharedPreferences("login",Context.MODE_PRIVATE);
                 SharedPreferences.Editor editor=preferences.edit();
                 editor.putString("login_status","on");
                 editor.commit();
             }
         });
         // Click and move to the next activity
         register.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 Intent intent = new Intent(LoginPage.this, Registration.class);
                 startActivityForResult(intent, REGISTRATION_REQUEST);
             }
         });

         // Click and move to the next activity
         database.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 Intent intent = new Intent(LoginPage.this, Database.class);
                 startActivity(intent);
             }
         }); 
     }

     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == REGISTRATION_REQUEST) {
             //if(resultCode == Registration.RESULT_OK){
             Log.d("Pikatchu", "User successfully registered!");
             Bundle res = data.getExtras();
             String result = res.getString("result");
             System.out.println(result);
             msg.setText(result); 
         }
     } 
} 

“我的菜单”屏幕:

public class Menu extends AppCompatActivity {
     private SharedPreferences preferences;
     Button startJourney, displayJourneys;
     TextView msg; // where to display the name of the user
     Button  buttonLogout ;
     /* the string is where to store data when we select something */
     String db_username;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.menu);

        buttonLogout = (Button) findViewById(R.id.btn_logout);
        msg = (TextView) findViewById(R.id.msg);
        startJourney = (Button) findViewById(R.id.recordingmode);

 //        Bundle bundle = getIntent().getExtras(); //       
 db_username = (bundle.getString("Username")); //// ////        // Set
 Welcome message to the user who logged in //       
 msg.setText("Welcome "+db_username);

         // Click and move to the next activity //        startJourney.setOnClickListener(new View.OnClickListener() { //       
 @Override //            public void onClick(View v) { //              
 Intent intent = new Intent(Menu.this, Recordingmode.class); //        
 intent.putExtra("Username", db_username); //               
 startActivity(intent); //            } //        });

         // Click and move to the next activity buttonLogout.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         SharedPreferences preferences=getSharedPreferences("login", Context.MODE_PRIVATE);
         SharedPreferences.Editor editor=preferences.edit();
         editor.putString("login_status","off");
         editor.commit();
         finish();
         moveTaskToBack(true);
     } });
    } 
}

但是如果我登录应用程序,则会引发错误:

java.lang.NullPointerException:尝试在null上调用虚拟方法'java.lang.String android.content.Context.getPackageName()' 对象引用

0 个答案:

没有答案