Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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
将用户从Java注销_Java_Android_Android Studio - Fatal编程技术网

将用户从Java注销

将用户从Java注销,java,android,android-studio,Java,Android,Android Studio,我正在创建一个带有登录/注册系统的社交应用程序,用户注销时遇到问题 当我单击注销按钮时,我想取消用户名设置并清除用户的整个会话,以便他们返回LoginActivity类。现在,当我转到profile活动并单击logout时,我会直接返回Home活动,该活动仅适用于登录的用户。从昨天开始我就一直在努力,但还是一无所获。有人能帮我吗 登录活动: //SharedPreferences preferences; private ProgressDialog loadingBar; private

我正在创建一个带有登录/注册系统的社交应用程序,用户注销时遇到问题

当我单击注销按钮时,我想取消用户名设置并清除用户的整个会话,以便他们返回
LoginActivity
类。现在,当我转到profile活动并单击logout时,我会直接返回Home活动,该活动仅适用于登录的用户。从昨天开始我就一直在努力,但还是一无所获。有人能帮我吗

登录活动:

//SharedPreferences preferences;

private ProgressDialog loadingBar;

private Button LoginButton;
private EditText LoginUsername, LoginPassword;
private TextView NeedNewAccountLink;
private static final String PREF_LOGIN = "LOGIN_PREF";

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

    //SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(PREF_LOGIN, MODE_PRIVATE);
    SharedPreferences sharedPreferences = getSharedPreferences(PREF_LOGIN, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();

}

LoginButton = (Button) findViewById(R.id.login_button);
    LoginUsername = (EditText) findViewById(R.id.login_username);
    LoginPassword = (EditText) findViewById(R.id.login_password);
    NeedNewAccountLink = (TextView) findViewById(R.id.need_new_account_link);
    loadingBar = new ProgressDialog(this);

    editor.putString("username", String.valueOf(LoginUsername));
    editor.putString("pw", String.valueOf(LoginPassword));
    editor.apply();

    if (LoginUsername != null) {

        editor.remove("username");
        editor.remove(String.valueOf(sharedPreferences));
        editor.remove("pw");
        editor.clear();
        editor.apply();

        SendUserToHomeActivity();
    }

private void SendUserToHomeActivity() {

    Intent mainIntent = new Intent(LoginActivity.this, HomeActivity.class);
    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(mainIntent);
    finish();
}

public void OnLogin(View view) {

    String username = LoginUsername.getText().toString();
    String pw = LoginPassword.getText().toString();

    String type = "login";

    BackgroundWorker backgroundWorker = new BackgroundWorker(this);
    backgroundWorker.execute(type, username, pw);

}
    LogoutButton.setOnClickListener(view -> {

        PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();

        sharedPreferences.edit().remove("username").apply();
        sharedPreferences.edit().remove("pw").apply();

        editor.remove("username");
        editor.remove("pw");
        editor.clear();
        editor.apply();

        finish();

        Intent intent = new Intent(ProfileActivity.this, LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);

    });
配置文件活动:

//SharedPreferences preferences;

private ProgressDialog loadingBar;

private Button LoginButton;
private EditText LoginUsername, LoginPassword;
private TextView NeedNewAccountLink;
private static final String PREF_LOGIN = "LOGIN_PREF";

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

    //SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(PREF_LOGIN, MODE_PRIVATE);
    SharedPreferences sharedPreferences = getSharedPreferences(PREF_LOGIN, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();

}

LoginButton = (Button) findViewById(R.id.login_button);
    LoginUsername = (EditText) findViewById(R.id.login_username);
    LoginPassword = (EditText) findViewById(R.id.login_password);
    NeedNewAccountLink = (TextView) findViewById(R.id.need_new_account_link);
    loadingBar = new ProgressDialog(this);

    editor.putString("username", String.valueOf(LoginUsername));
    editor.putString("pw", String.valueOf(LoginPassword));
    editor.apply();

    if (LoginUsername != null) {

        editor.remove("username");
        editor.remove(String.valueOf(sharedPreferences));
        editor.remove("pw");
        editor.clear();
        editor.apply();

        SendUserToHomeActivity();
    }

private void SendUserToHomeActivity() {

    Intent mainIntent = new Intent(LoginActivity.this, HomeActivity.class);
    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(mainIntent);
    finish();
}

public void OnLogin(View view) {

    String username = LoginUsername.getText().toString();
    String pw = LoginPassword.getText().toString();

    String type = "login";

    BackgroundWorker backgroundWorker = new BackgroundWorker(this);
    backgroundWorker.execute(type, username, pw);

}
    LogoutButton.setOnClickListener(view -> {

        PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();

        sharedPreferences.edit().remove("username").apply();
        sharedPreferences.edit().remove("pw").apply();

        editor.remove("username");
        editor.remove("pw");
        editor.clear();
        editor.apply();

        finish();

        Intent intent = new Intent(ProfileActivity.this, LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);

    });

我相信从你需要的编辑文本中获取文本

LoginUsername.getText().toString()

并根据If条件检查EditText“LoginUsername”,除非 它指向错误的ID

尝试在下面的代码块中进行适当的更改

    LoginUsername = (EditText) findViewById(R.id.login_username);
    LoginPassword = (EditText) findViewById(R.id.login_password);
    NeedNewAccountLink = (TextView) findViewById(R.id.need_new_account_link);
    loadingBar = new ProgressDialog(this);

    editor.putString("username", String.valueOf(LoginUsername));
    editor.putString("pw", String.valueOf(LoginPassword));
    editor.apply();

    if (LoginUsername != null) {

        editor.remove("username");
        editor.remove(String.valueOf(sharedPreferences));
        editor.remove("pw");
        editor.clear();
        editor.apply();

        SendUserToHomeActivity();
    }

删除
意图。标志\u活动\u清除\u顶部
标志将解决您的问题。请参阅此项。

使用“finish()”方法,您将从堆栈中清除当前活动(ProfileActivity),并从不再存在的“ProfileActivity”中调用意图。只需将“finish()”保持在您的意图调用下面。除了前面的答案之外,不要使用SharedReferences.apply,请使用commit()。Apply是异步的,在启动登录活动时可能不会写入磁盘。在这种情况下,您可以直接转到主页。@Gabeschen我尝试了这个
PreferenceManager.GetDefaultSharedReferences(getBaseContext()).edit().clear().commit()但它仍然不起作用我不明白为什么要同时使用remove和clear。要删除特定密钥时,请使用“删除”。在您的情况下,只需使用editor.clear().apply()。并确保编辑器对象在两个活动中引用相同的共享pref