android - android - 即使意图在其代码中具有另一个活动,也始终切换到相同的活动
问题描述
我有一个有 3 个活动的应用程序:
- 消息活动
- 登录活动
- 注册活动
LoginActivity包含 2 个EditTexts和一个使用户保持登录状态的CheckBox。当然还有 2 个按钮:一个用于登录,另一个用于注册帐户。
我intent
在LoginActivity中添加了一个,因此登录时会显示MessagesActivity。如果未选中CheckBoxintent
,则在MessagesActivity中读取另一个,切换到LoginActivitySharedPreferences
。
问题是我不知道该怎么做。我还是新手SharedPreferences
。即使登录并且输入为真,应用程序也不会切换到MessagesActivity。它再次显示LoginActivity。
如果有人知道该怎么做,我需要帮助。
注册活动.java
public class RegisterActivity extends AppCompatActivity {
private EditText registerUsername;
private EditText registerEmail;
private EditText registerPassword;
private EditText registerConfirmPassword;
private Button registerRegisterButton;
private Button registerLoginButton;
private ProgressBar registerProgressBar;
private FirebaseFirestore firebaseFirestore;
private String userID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
registerUsername = findViewById(R.id.register_username);
registerEmail = findViewById(R.id.register_email);
registerPassword = findViewById(R.id.register_password);
registerConfirmPassword = findViewById(R.id.register_confirm_password);
registerRegisterButton = findViewById(R.id.register_register_button);
registerLoginButton = findViewById(R.id.register_login_button);
registerProgressBar = findViewById(R.id.register_progressBar);
firebaseFirestore = FirebaseFirestore.getInstance();
registerLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent loginIntent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(loginIntent);
finish();
}
});
registerRegisterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username = registerUsername.getText().toString();
String email = registerEmail.getText().toString();
String password = registerPassword.getText().toString();
String confirmPassword = registerConfirmPassword.getText().toString();
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password) && !TextUtils.isEmpty(confirmPassword)) {
if (password.equals(confirmPassword)) {
registerProgressBar.setVisibility(View.VISIBLE);
Map<String, String> usersMap = new HashMap<>();
usersMap.put("username", username);
usersMap.put("email", email);
usersMap.put("password", password);
userID = registerUsername.getText().toString();
firebaseFirestore.collection("Users").document(userID).set(usersMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toasty.success(RegisterActivity.this, "Successfully Registered", Toast.LENGTH_SHORT).show();
Intent messagesIntent = new Intent(RegisterActivity.this, MessagesActivity.class);
startActivity(messagesIntent);
finish();
registerProgressBar.setVisibility(View.INVISIBLE);
}
});
} else {
Toasty.error(RegisterActivity.this, "Passwords Don't Match", Toast.LENGTH_SHORT).show();
}
}
}
});
}}
登录活动.java
public class LoginActivity extends AppCompatActivity {
private EditText loginUsername;
private EditText loginPassword;
private CheckBox loginKeepSignedIn;
private Button loginLoginButton;
private Button loginRegisterButton;
private ProgressBar loginProgressBar;
private FirebaseFirestore firebaseFirestore;
private String userID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginUsername = findViewById(R.id.login_username);
loginPassword = findViewById(R.id.login_password);
loginKeepSignedIn = findViewById(R.id.login_keep_signed_in);
loginLoginButton = findViewById(R.id.login_login_button);
loginRegisterButton = findViewById(R.id.login_register_button);
loginProgressBar = findViewById(R.id.login_progressBar);
firebaseFirestore = FirebaseFirestore.getInstance();
if (loginKeepSignedIn.isChecked()) {
SharedPreferences preferences = getSharedPreferences("Preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("keepSignedIn", true);
editor.apply();
}
loginRegisterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(registerIntent);
finish();
}
});
loginLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String username = loginUsername.getText().toString();
final String password = loginPassword.getText().toString();
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
loginProgressBar.setVisibility(View.VISIBLE);
userID = loginUsername.getText().toString();
firebaseFirestore.collection("Users").document(userID).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
String userUsername = task.getResult().getString("username");
String userPassword = task.getResult().getString("password");
if (userUsername.equals(username) && userPassword.equals(password)) {
Toast.makeText(LoginActivity.this, "Everything is equal", Toast.LENGTH_SHORT).show();
Toasty.info(LoginActivity.this, "Switching to Messages Activity", Toast.LENGTH_SHORT).show();
Intent messagesIntent = new Intent(LoginActivity.this, MessagesActivity.class);
startActivity(messagesIntent);
LoginActivity.this.finish();
} else {
Toast.makeText(LoginActivity.this, "There is something not equal", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(LoginActivity.this, "Task is not successful",Toast.LENGTH_SHORT).show();
}
loginProgressBar.setVisibility(View.INVISIBLE);
}
});
}
}
});
}}
MessagesActivity.java
public class MessagesActivity extends AppCompatActivity {
private Toolbar messagesToolbar;
private Button logoutBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_messages);
messagesToolbar = findViewById(R.id.messages_toolbar);
setSupportActionBar(messagesToolbar);
getSupportActionBar().setTitle("Messages");
logoutBtn = findViewById(R.id.logout);
SharedPreferences preferences = getSharedPreferences("Preferences", MODE_PRIVATE);
boolean keepSignedIn = preferences.getBoolean("keepSignedIn", false);
if (!keepSignedIn) {
Intent loginIntent = new Intent(MessagesActivity.this, LoginActivity.class);
startActivity(loginIntent);
finish();
}
logoutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent loginIntent = new Intent(MessagesActivity.this, LoginActivity.class);
startActivity(loginIntent);
finish();
}
});
}
}
解决方案
那么你只需要创建一个实例SharedPreferences
并存储你需要的值。它可以是.xmlboolean
等String
您也可以将首选项存储在 .xml 文件中,并使用您选择的名称或让系统为您选择一个名称。
使用这段代码来学习。
public class PrefsExample extends AppCompatActivity {
final String sharedPreferencesName = "chosenName";
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
//this allows the system to create a system wide sharedprefs file
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
//this uses the name provided as the string above
//sharedPreferences = this.getSharedPreferences(sharedPreferencesName, MODE_PRIVATE);
//save the value(s) using
editor = sharedPreferences.edit();
editor.putBoolean("Logged", true);
editor.putString("Log In", "True");
editor.putInt("LoggedIn", 1);
//try out more options of the editor
//after editing,always apply to save
editor.apply();
//for read operations
readPrefs();
super.onCreate(savedInstanceState);
}
public void readPrefs() {
//again use this if only your prefs are system wide
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
//and this if using a specified name
//sharedPreferences = this.getSharedPreferences(sharedPreferencesName, MODE_PRIVATE);
//retrieve your value using
String pref = sharedPreferences.getString("Log In","");
//use the get method of SharedPreferences to get but supply a default value eg for string "",for int 0,for boolean false e.t.c
//from here use a loop to check if values retrieved and values stored match and decide on which activity to proceed to from there
}}
推荐阅读
- git - Synology NAS 无法连接到 Git 服务器存储库
- mysql - 如何加入两个表其中一个有重复的ID
- c# - 谷歌 G-Suite / Workspace SDK
- python - 如何替换现有代码中的 imp 模块以加载 .pyc 文件?
- r - 按日期重新排列列
- php - 加载资源失败:net::ERR_CONNECTION_REFUSED // Angular 和 api php
- r - 结合 purrr::map R 返回 acf 图
- html - Visual Studio Code 实时服务器扩展
- youtube - 视频脚本在单独的窗口中随视频滚动
- javascript - 需要检查类别中是否存在频道,如果不存在则在 Discord.js 中创建一个新频道