首页 > 解决方案 > android - 即使意图在其代码中具有另一个活动,也始终切换到相同的活动

问题描述

我有一个有 3 个活动的应用程序:

  1. 消息活动
  2. 登录活动
  3. 注册活动

LoginActivity包含 2 个EditTexts和一个使用户保持登录状态的CheckBox。当然还有 2 个按钮:一个用于登录,另一个用于注册帐户。

intentLoginActivity中添加了一个,因此登录时会显示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();

        }
    });

}

}

标签: androidsharedpreferencesgoogle-cloud-firestore

解决方案


那么你只需要创建一个实例SharedPreferences并存储你需要的值。它可以是.xmlbooleanString您也可以将首选项存储在 .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
}}

推荐阅读