要保持登录状态,请在Android Studio中使用共享的首选项

时间:2020-07-14 03:49:05

标签: android sharedpreferences

当用户登录时,如何在共享首选项中存储登录详细信息。当共享首选项包含数据时,重新打开应用程序,则应将其定向到主要活动,否则应定向到登录活动。

1)如何在登录活动中使用共享的首选项存储登录详细信息。 2)如何检查是进入初始屏幕活动中的主要活动还是登录活动。

启动画面活动

public class SplashScreen extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(new Intent(SplashScreen.this, LoginAcivity.class));
            finish();
        }
    }, 1500);
}

}

登录活动

public class LoginAcivity extends AppCompatActivity {
EditText numberEt,passwordEt;
Button submit_button;
TextView signupText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_acivity);
    numberEt=findViewById(R.id.number);
    passwordEt=findViewById(R.id.password);
    submit_button=findViewById(R.id.submit_button);
    signupText=findViewById(R.id.sign_up_text);
    signupText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(LoginAcivity.this,RegisterActivity.class));
        }
    });
    submit_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            numberEt.setError(null);
            passwordEt.setError(null);
            String number =numberEt.getText().toString();
            String password=passwordEt.getText().toString();
            if(isValid(number,password)){
                login(number,password);
            }

        }
    });
}
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
SharedPreferences.Editor editor = pref.edit();
private void login(final String number,final String password){
    StringRequest stringRequest = new StringRequest(Request.Method.POST, Endpoints.login_url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            if(!(response.equals("Invalid Credentials"))){
                editor.putInt("numberEt", Integer.parseInt(number));
                editor.commit();
                Toast.makeText(LoginAcivity.this,response,Toast.LENGTH_SHORT).show();
                startActivity(new Intent(LoginAcivity.this,MainActivity.class));
                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("number",number).apply();
                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("city",response).apply();

                LoginAcivity.this.finish();
            }else{
                Toast.makeText(LoginAcivity.this,response,Toast.LENGTH_SHORT).show();
            }

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(LoginAcivity.this,"Something went Wrong:(",Toast.LENGTH_SHORT).show();
            Log.d("VOLLEY", Objects.requireNonNull(error.getMessage()));
        }
    }){
        @Override
        protected Map<String,String> getParams() throws AuthFailureError {
            Map<String,String> params=new HashMap<>();
            params.put("number",number);
            params.put("password",password);
            return params;
        }
    };
    VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);

}
private boolean isValid(String number, String password){
    if(number.isEmpty()){
        showMessage("Empty Mobile Number");
        numberEt.setError("Empty Mobile Number");
        return false;
    }else if(password.isEmpty()){
        showMessage("Empty Password");
        passwordEt.setError("Empty Password");
        return false;
    }
    return true;
}
private void showMessage(String msg){
    Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
}

}

我尝试在登录活动中使用“编辑器”以共享首选项存储数据,是否正确? 这样做之后,如何检查初始屏幕活动中的共享首选项。 帮我整理一下。谢谢:)

1 个答案:

答案 0 :(得分:1)

  1. 将登录详细信息保存在onResponse(String response)

      SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
         SharedPreferences.Editor editor = sharedPref.edit();
         editor.putString("login", response);
         editor.commit();
    
  2. 检查用户是否已经登录

    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
     String city = sharedPref.getString("login", "");
     if(!city.equal("")){
         //user already logged in, go to Main Screen
     }else {
       //user hasn't logged in yet, to go Login Screen
     }