我有一个Android应用程序,其中我使用共享首选项登录。现在我有一个类似于用户登录的流程。当登录成功时,凭据被存储。当用户再次打开应用程序时,用户名密码出现在编辑文本中。我有一个登录按钮,并有setonclicklistner登录并跳转到内部活动。 我正在尝试一个流程,就像用户成功登录...并重新启动应用程序,凭据存储..它应自动进入下一个活动(内部活动)。 到目前为止我一直在努力..
如果凭据良好,则在oncreate打开下一个活动的onclicklistner
buttonlogin.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(etemail.getText().toString().equals("") && etpass.getText().toString().equals(""))
{
Toast.makeText(getApplicationContext(),"Enter your username and Password",Toast.LENGTH_LONG).show();
}
else
{
load_data();
}
}
});
共享首选项代码
private void savePreferences() {
SharedPreferences settings = getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
// Edit and commit
UnameValue = etemail.getText().toString();
PasswordValue = etpass.getText().toString();
editor.putString(PREF_UNAME, UnameValue);
editor.putString(PREF_PASSWORD, PasswordValue);
editor.commit();
}
private void loadPreferences()
{
SharedPreferences settings = getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
// Get value
UnameValue = settings.getString(PREF_UNAME, DefaultUnameValue);
PasswordValue = settings.getString(PREF_PASSWORD, DefaultPasswordValue);
etemail.setText(UnameValue);
etpass.setText(PasswordValue);
}
如果要实现这一点,我该怎么做?如果自动存储用户名密码打开下一个活动而不是单击登录按钮? 感谢
答案 0 :(得分:2)
您可以在contains(String key)
课程中使用SharedPreferences
可以在loadPreferences()
如果登录仅用于允许访问下一个活动,那么您不需要模拟按钮点击,但如果点击根据提供的用户名/密码加载其他数据,那么您必须这样做在Button类中使用performClick()
。
因此您的代码可能如下所示:
private void loadPreferences()
{
SharedPreferences settings = getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
if(settings.contains(PREF_UNAME) && settings.contains(PREF_PASSWORD)){
//you can start the 2nd activity directly here
//Intent intent = new Intent (...)
//startActivity(intent);
//finish();
//OR
//load data into edittexts and programatically click the login button
UnameValue = settings.getString(PREF_UNAME, DefaultUnameValue);
PasswordValue = settings.getString(PREF_PASSWORD, DefaultPasswordValue);
etemail.setText(UnameValue);
etpass.setText(PasswordValue);
//here it will click the button as if the user did it.
btnLogin.performClick();
}//contains
}
旁注:在SharedPreferences中存储密码并不是很好的做法(不安全),特别是纯文本,而不是加密
答案 1 :(得分:0)
首先打开下一个活动,然后在onCreate
方法中检查用户是否已登录。如果没有关闭第一个活动,则打开登录活动。
<强> MainActivity.java 强>
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
session = new SessionManager(getApplicationContext());
CheckLogin();
...
}
private void CheckLogin(){
if(session.checkLogin()){finish();}
}
<强> SessionManager.java 强>
public boolean checkLogin(){
// Check login status
if(!this.isUserLoggedIn()){
// user is not logged in redirect him to Login Activity
Intent i = new Intent(_context, LoginActivity.class);
// Closing all the Activities from stack
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);
return true;
}
return false;
}
答案 2 :(得分:0)
在sharedpreference editor.putBoolean("hasLoggedin", true);
所以它应该像
UnameValue = etemail.getText().toString();
PasswordValue = etpass.getText().toString();
editor.putString(PREF_UNAME, UnameValue);
editor.putString(PREF_PASSWORD, PasswordValue);
editor.putBoolean("hasLoggedin", true);
editor.commit();
然后检查像
这样的Oncreate方法 boolean hasLoggedin = sp.getBoolean("hasLoggedin", false);
if (hasLoggedin) {
Intent intent = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(intent);
finish();
}