Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否实施SharedReferences以保存用户数据?_Android_Sharedpreferences - Fatal编程技术网

Android 是否实施SharedReferences以保存用户数据?

Android 是否实施SharedReferences以保存用户数据?,android,sharedpreferences,Android,Sharedpreferences,我正在开发一个在Firebase中保存用户数据的应用程序,但每次重新启动应用程序时,用户必须再次登录,因为会话未保持打开状态,我已经了解到我可以实现SharedReferences,但我不知道如何在我的项目中实现它 以下是LoginActivity.java: public class LoginActivity extends AppCompatActivity { private static final String TAG = "LoginActivity"; // La respu

我正在开发一个在Firebase中保存用户数据的应用程序,但每次重新启动应用程序时,用户必须再次登录,因为会话未保持打开状态,我已经了解到我可以实现SharedReferences,但我不知道如何在我的项目中实现它

以下是LoginActivity.java:

public class LoginActivity extends AppCompatActivity {


private static final String TAG = "LoginActivity";
// La respuesta del JSON es
private static final String username = "success";
private static final String TAG_MESSAGE = "message";

private Button btnLogin, btnLinkToSignUp;
private ProgressBar progressBar;
private FirebaseAuth auth;
private EditText loginInputEmail, loginInputPassword;
private TextInputLayout loginInputLayoutEmail, loginInputLayoutPassword;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    auth = FirebaseAuth.getInstance();

    loginInputLayoutEmail = (TextInputLayout) findViewById(R.id.login_input_layout_email);
    loginInputLayoutPassword = (TextInputLayout) findViewById(R.id.login_input_layout_password);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);

    loginInputEmail = (EditText) findViewById(R.id.login_input_email);
    loginInputPassword = (EditText) findViewById(R.id.login_input_password);

    btnLogin = (Button) findViewById(R.id.btn_login);
    btnLinkToSignUp = (Button) findViewById(R.id.btn_link_signup);

    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            submitForm();
        }
    });

    btnLinkToSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(appz.seoallinone.LoginActivity.this, SignupActivity.class);
            startActivity(intent);
        }
    });
}

/**
 * Validating form
 */
private void submitForm() {
    String email = loginInputEmail.getText().toString().trim();
    String password = loginInputPassword.getText().toString().trim();

    if(!checkEmail()) {
        return;
    }
    if(!checkPassword()) {
        return;
    }
    loginInputLayoutEmail.setErrorEnabled(false);
    loginInputLayoutPassword.setErrorEnabled(false);

    progressBar.setVisibility(View.VISIBLE);
    //authenticate user
    auth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    // If sign in fails, Log a message to the LogCat. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.
                    progressBar.setVisibility(View.GONE);
                    if (!task.isSuccessful()) {
                        // there was an error
                        Toast.makeText(LoginActivity.this, getString(R.string.auth_failed), Toast.LENGTH_LONG).show();

                    } else {
                        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                        startActivity(intent);
                        finish();
                    }
                }
            });
}

private boolean checkEmail() {
    String email = loginInputEmail.getText().toString().trim();
    if (email.isEmpty() || !isEmailValid(email)) {

        loginInputLayoutEmail.setErrorEnabled(true);
        loginInputLayoutEmail.setError(getString(R.string.err_msg_email));
        loginInputEmail.setError(getString(R.string.err_msg_required));
        requestFocus(loginInputEmail);
        return false;
    }
    loginInputLayoutEmail.setErrorEnabled(false);
    return true;
}

private boolean checkPassword() {

    String password = loginInputPassword.getText().toString().trim();
    if (password.isEmpty() || !isPasswordValid(password)) {

        loginInputLayoutPassword.setError(getString(R.string.err_msg_password));
        loginInputPassword.setError(getString(R.string.err_msg_required));
        requestFocus(loginInputPassword);
        return false;
    }
    loginInputLayoutPassword.setErrorEnabled(false);
    return true;
}

private static boolean isEmailValid(String email) {
    return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}

private static boolean isPasswordValid(String password){
    return (password.length() >= 6);
}

private void requestFocus(View view) {
    if (view.requestFocus()) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
}

@Override
protected void onResume() {
    super.onResume();
    progressBar.setVisibility(View.GONE);
}
}


我如何在这个具体项目中实施它?。谢谢大家!

这个答案在和中都很容易找到

要回答您的问题,您可以使用以下代码存储和获取首选项:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Car","Tesla");
editor.apply();


SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Car", "");

FirebaseAuth已经负责为您保留会话

您只需在onCreate登录活动中检查用户是否存在于Auth实例中:

if (FirebaseAuth.getInstance().getCurrentUser() != null) {
    navigateToHomeScreen();
}
您应该实现navigateToHomeScreen来启动活动,以显示用户是否登录

这样,您就不需要在SharedReferences中存储任何内容。

是一个好的开始。关于更直截了当的东西,你可以检查一下