4 回答
TA贡献1797条经验 获得超4个赞
注意:我制作了一个登录系统(没有密码),即使您没有在登录系统上工作,我仍然认为该技术仍然适用于您的情况。
尝试添加另一个存储布尔值的共享首选项,以检查用户是否在线。例如,在您的 LoginActivity 中,添加
editor.putBoolean("isOnline", true); 编辑器.apply();
当您单击登录按钮时。
同样,当您注销时,只需输入
editor.putBoolean("isOnline", false); 编辑器.apply();
我是按照你的问题做的。
MainActivity.java(这是登录活动)
public class MainActivity extends AppCompatActivity {
SharedPreferences pref;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText et = findViewById(R.id.et);
Button btnRegister = findViewById(R.id.btn_register);
Button btnLogin = findViewById(R.id.btn_login);
pref = getSharedPreferences("MyPref", MODE_PRIVATE);
editor = pref.edit();
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.putString("username", et.getText().toString());
editor.putBoolean("isOnline", false);
editor.apply();
}
});
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (et.getText().toString().equals(pref.getString("username", null))) {
Intent intent = new Intent(getApplicationContext(), WelcomeActivity.class);
intent.putExtra("name", et.getText().toString());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
editor.putBoolean("isOnline", true);
editor.apply();
startActivity(intent);
finish();
}
else {
Toast.makeText(MainActivity.this, "Incorrect input", Toast.LENGTH_LONG).show();
}
}
});
// This is when user has not clicked the log out button, then we go to the WelcomeActivity instead
if (pref.getBoolean("isOnline", false)) {
startActivity(new Intent(getApplicationContext(), WelcomeActivity.class));
finish();
}
}
}
WelcomeActivity.java(登录后访问的Activity)
public class WelcomeActivity extends AppCompatActivity {
SharedPreferences pref;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
pref = getSharedPreferences("MyPref", MODE_PRIVATE);
editor = pref.edit();
editor.putBoolean("isOnline", true);
editor.apply();
Button btnLogout = findViewById(R.id.logout);
btnLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// When user clicks on the logout button, we set this to false. So everything will be back to normal.
editor.putBoolean("isOnline", false);
editor.apply();
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finishAffinity();
}
else {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
});
}
}
TA贡献1869条经验 获得超4个赞
将输入的值保存在共享首选项中,并使用“EncryptedSharedPreferences”以确保安全
在 onCreate 检查用户是否输入了值并在进行检查之前保存
if (string.equals(pref.getString("code", null))){
Intent intent = new Intent(Login.this, WelcomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);`enter code here`
}
并完成当前活动所以现在下一个屏幕将自动打开
TA贡献1900条经验 获得超5个赞
您需要更改您的逻辑,当您打开应用程序时,Login.class 将是您的第一个屏幕,在该屏幕中您必须检查输入的代码是否与共享首选项值类似,如果是 true,则将登录屏幕移至欢迎屏幕,希望我的回答对您有所帮助
TA贡献1772条经验 获得超5个赞
伙计,这可以通过创建会话来完成。
就像当您的编辑文本与所需文本匹配时,您应该在共享首选项中分配一个值,该值将在创建会话时充当。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
string = editText.getText().toString();
if (string.equals(pref.getString("code", null))){
SharedPreferences.Editor edit = pref.edit();
edit.putString("Session", "1");
edit.apply();
Intent intent = new Intent(Login.this, WelcomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}else {
Toast.makeText(Login.this, "Désolé mais votre code est incorrect",Toast.LENGTH_LONG).show();
}
现在在您所需屏幕的 onCreate 方法中。只需检查会话值是否包含在您的 SharedPreferences 中,然后根据您的需要执行任何操作。
添加回答
举报