У меня есть приложение, в котором есть 3 действия:

  1. Сообщения
  2. LoginActivity
  3. RegisterActivity

LoginActivity содержит 2 EditTexts и CheckBox , который удерживает пользователя в системе. И, конечно же, 2 кнопки : одна для входа в систему, а другой - для регистрации учетной записи.

Я добавил intent в LoginActivity , поэтому при входе в систему отображается MessagesActivity . И еще один intent в MessagesActivity для при чтении из SharedPreferences, если CheckBox не отмечен, переключение на LoginActivity .

Проблема в том, что я не знаю, как это сделать. Я все еще новичок в SharedPreferences. И даже при входе в систему и вводимых данных приложение не переключается на MessagesActivity . Он снова показывает LoginActivity .

Мне нужна помощь в этом, пожалуйста, если кто-нибудь знает, как это сделать.

RegisterActivity.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();

                }

            }

        }
    });

}}

< Сильный > LoginActivity.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();

        }
    });

}

}

0
user6086991 23 Сен 2018 в 21:29

1 ответ

Лучший ответ

Что ж, вам просто нужно создать экземпляр SharedPreferences и сохранить нужное значение. Это может быть boolean, 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
}}
0
Raj 23 Сен 2018 в 20:02