我们几乎在每个应用程序中都看到,用户第一次登录而下次打开应用程序时,他会直接进入应用程序而无需身份验证。因此,我尝试在我的应用程序中创建完全相同的功能,我遵循文档并编码到我的应用程序中。构建成功,但不起作用,关闭应用程序后一直要求身份验证。
代码
package abc.xyz;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button b;
SharedPreferences sp;
EditText username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button)findViewById(R.id.button);
username = (EditText)findViewById(R.id.editText);
password = (EditText)findViewById(R.id.editText2);
sp = getSharedPreferences("b", MODE_PRIVATE);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login();
if(sp.getBoolean("Logged",false)){
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
}
});
}
public void login(){
String user=username.getText().toString().trim();
String pass=password.getText().toString().trim();
if(user.equals("admin")&& pass.equals("admin"))
{
sp.edit().putBoolean("Logged", true).apply();
Toast.makeText(this,"Success!",Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}else {
Toast.makeText(this,"username and password do not matched!",Toast.LENGTH_LONG).show();
}
}
}
有人可以帮我吗?
最佳答案
您将状态保存为true
,然后每次执行登录方法时,您需要在值为true
时移动到MainActivity2
所以使用
// move to next activity if user is authenticated
if(sp.getBoolean("Logged",false)){
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login();
}
});
注意:正如@shb提到的,区分大小写很重要
关于android - 用户使用 SharedPreferences 保持登录 Android 应用程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52211177/