gpt4 book ai didi

android - 从应用程序 Android 注销

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:35 25 4
gpt4 key购买 nike

当用户单击“注销”时,我尝试从我的应用程序注销。如果用户登录后没有关闭应用程序,如果他注销,它工作正常。然后它工作正常。后退按钮将无效,以防万一登录后再次显示登录页面但是当用户在登录后关闭应用程序然后他确实注销时,登录页面没有显示它正在向我显示一个空白页面

代码

public class AppState {
private static AppState singleInstance;

private boolean isLoggingOut;

private AppState() {
}

public static AppState getSingleInstance() {
if (singleInstance == null) {
singleInstance = new AppState();
}
return singleInstance;
}

public boolean isLoggingOut() {
return isLoggingOut;
}

public void setLoggingOut(boolean isLoggingOut) {
this.isLoggingOut = isLoggingOut;
}
}

注销点击

logout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
SharedPreferences myPrefs = getSharedPreferences("MY",
MODE_PRIVATE);
SharedPreferences.Editor editor = myPrefs.edit();
editor.clear();
editor.commit();
AppState.getSingleInstance().setLoggingOut(true);
Log.d(TAG, "Now log out and start the activity login");
Intent intent = new Intent(HomePage.this,
LoginPage.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

}
});

在登录 Activity 中

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MAIN_ACTIVITY_REQUEST_CODE) {

if (!AppState.getSingleInstance().isLoggingOut()) {
finish();
} else {
AppState.getSingleInstance().setLoggingOut(false);
super.onActivityResult(requestCode, resultCode, data);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);

}

请告诉我我做错了什么

根据 Vivek Bhusal 的建议,我尝试使用 sharedpref

点击主页注销

logout.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
SharedPreferences myPrefs = getSharedPreferences("Activity",
MODE_PRIVATE);
SharedPreferences.Editor editor = myPrefs.edit();
editor.clear();
editor.commit();
//AppState.getSingleInstance().setLoggingOut(true);
setLoginState(true);
Log.d(TAG, "Now log out and start the activity login");
Intent intent = new Intent(HomePage.this,
LoginPage.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

}
});

private void setLoginState(boolean status) {
SharedPreferences sp = getSharedPreferences("LoginState",
MODE_PRIVATE);
SharedPreferences.Editor ed = sp.edit();
ed.putBoolean("setLoggingOut", status);
ed.commit();
}

登录页面

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
SharedPreferences sp = getSharedPreferences("LoginState",
MODE_PRIVATE);
boolean stateValue = sp.getBoolean("setLoggingOut", false);
if (requestCode == MAIN_ACTIVITY_REQUEST_CODE) {

if (!stateValue) {
finish();
} else {
//AppState.getSingleInstance().setLoggingOut(false);
updateLoginState(false);
super.onActivityResult(requestCode, resultCode, data);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}

当我再次重启应用程序然后注销时,仍然出现显示空白屏幕的相同问题。

最佳答案

我注意到您的注销按钮确实启动了登录 Activity ,但没有完成主页 Activity 。关闭主页:

Intent intent = new Intent(HomePage.this, LoginPage.class);
startActivity(intent);
finish() // This call is missing.

要从登录页面打开它:

Intent intent = new Intent(LoginPage.this, HomePage.class);
startActivity(intent);
finish()

在开始另一项 Activity 后完成一项 Activity 。这样您的任务堆栈将只有一个 Activity ,即没有回溯历史。查看 Vivek Bhusal 发布的示例应用。

我建议阅读此 SO question , accepted answer , 还有 this answer有关如何使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 执行注销和一些警告的更多想法,在您的情况下,这并不是真正必要的。

关于android - 从应用程序 Android 注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com