java - 面临有关在 android 中改造登录的问题
问题描述
我面临改造登录的问题。当我在手机上运行应用程序时,我使用注册用户登录...登录成功...但是当我注销并想使用另一个帐户重新登录时,“应用程序使用以前的帐户登录我” ...我不明白这是什么问题,请帮忙。我不明白为什么我的应用程序会出现这个问题。
注意:我在应用程序中使用改造(使用 Firebase)进行注册和登录。谢谢
这是我的登录类的代码
private Button forgot ;
private TextView CreactAccount_text;
private EditText login_email , login_password;
private ProgressDialog mLoginProgress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Toolbar toolbar = (Toolbar) findViewById(R.id.login_page_toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar()!= null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
FirebaseApp.initializeApp(this);
// Realm.init(this);
// User Session Manager
Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.setStatusBarColor(getColor(R.color.login_statusbar_color));
}
else {
window.setStatusBarColor(getResources().getColor(R.color.login_statusbar_color));
}
mLoginProgress = new ProgressDialog(this);
CreactAccount_text = (TextView) findViewById(R.id.ui_crateaccount_text);
forgot = (Button) findViewById(R.id.ui_btn_forgot);
forgot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent forgot_password = new Intent(Login_Activity.this , Forgot_Password_Activity.class);
startActivity(forgot_password);
}
});
CreactAccount_text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent move_signup = new Intent(Login_Activity.this , Signup_Activity.class);
startActivity(move_signup);
}
});
login_email = (EditText) findViewById(R.id.ui_login_email);
login_password = (EditText) findViewById(R.id.ui_login_password);
findViewById(R.id.ui_signin).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
usersignin();
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home)
finish();
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(
R.anim.no_anim, R.anim.slide_right_out);
AppUtils.hideSoftKeyboard(this);
}
public void usersignin(){
final String email = login_email.getText().toString().trim();
final String password = login_password.getText().toString().trim();
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
login_email.setError("Email is not correctly formated");
login_email.requestFocus();
return;
}
if (password.isEmpty()){
login_password.setError("password is required");
login_password.requestFocus();
return;
}
if (password.length() < 6){
login_password.setError("Password should be atleast 6 characters");
login_password.requestFocus();
return;
}
if(!TextUtils.isEmpty(email) || !TextUtils.isEmpty(password)){
mLoginProgress.setTitle("Logging In");
mLoginProgress.setMessage("Please wait while we check your credentials.");
mLoginProgress.setCanceledOnTouchOutside(false);
mLoginProgress.show();
SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.USERNAME,email);
SharedPreferenceUtil.storeStringValue(Login_Activity.this,Constants.PASSWORD,password);
RetrofitUtil.createProviderAPI().userLogin(email , password).enqueue(loginUser(this));
}
}
@Override
public void onLoginUser(RetrofitClientLogin data) {
if(data.getType().equals(Constants.SUCCESS)){
FirebaseInstanceId.getInstance().getToken();
UtilFirebaseAnalytics.logEvent(Constants.EVENT_LOGIN,Constants.KEY_EMAIL,login_email.getText().toString());
SharedPreferenceUtil.storeBooleanValue(this,Constants.ISUSERLOGGEDIN,true);
if(getIntent() != null && getIntent().getBooleanExtra(Constants.IS_RESULT_ACTIVITY,false)){
setResult(RESULT_OK);
}else{
hideProgressDialog();
openAcitivty(Home_Activity.class);
}
loginOnFirebase();
}
}
private void loginOnFirebase(){
final FirebaseAuth mAuth = FirebaseAuth.getInstance();
FirebaseUser currentUser = mAuth.getCurrentUser();
if(currentUser == null){
final String email = login_email.getText().toString();
final String password = login_password.getText().toString();
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(Login_Activity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
hideProgressDialog();
finish();
}
});
}else{
hideProgressDialog();
finish();
}
}
});
}
}
protected void openAcitivty(Class<?> cls) {
Intent intent = new Intent(this, cls);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
protected void showProgressDialog(String msg) {
try {
if (mLoginProgress != null && !mLoginProgress.isShowing()) {
mLoginProgress.setMessage(msg);
mLoginProgress.show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void hideProgressDialog() {
try {
if (mLoginProgress != null && mLoginProgress.isShowing()) {
mLoginProgress.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onSignup(RetrofitClientLogin data) {
}
@Override
public void OnError(String error) {
hideProgressDialog();
Toast.makeText(this,error,Toast.LENGTH_LONG).show();
}
解决方案
您正在使用 SharedPreferences 来存储登录凭据。一旦用户输入有效的登录凭据(登录 ID 和密码),您将其存储在usersignin()
方法中的 SharedPreferences 中。
SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.USERNAME, email);
SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.PASSWORD, password);
现在,我假设(您只发布了 LoginActivity 而没有提及其他部分)您的应用程序有 Splash 页面。出现在登录页面之前。您在其中决定用户是否已经登录(使用 SharedPreference 值)。如果是,则重定向到主页否则登录页面。
此问题的修复非常简单。当用户从应用程序中注销时,您还需要清除 SharedPreferences。
像这样,
SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.USERNAME, null);
SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.PASSWORD, null);
推荐阅读
- json - 我的 JSON 解析不起作用
- python - Docker 运行“无效的引用格式”
- php - Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] 连接被拒绝默认字符集 utf8mb4 collate utf8mb4_unicode_ci
- javascript - Javascript局部变量覆盖全局变量?
- ibm-cloud-infrastructure - 使用第二个磁盘创建 vGPU 设备
- javascript - 无法在 js 上填充 ddl
- solr - facet.mincount 在 Range Faceting 中被忽略
- java - 使用带有 Groovy 2.6+ 的 Spock 框架来支持 Java 8+ 语法
- java - 使用 REST API 下载文件
- html - 如何定位类并为每个类设置不同的背景颜色?