无法从 Fragment 中的 sharedPreferences 获取字符串

Can't get string from sharedPreferences in Fragment

我是一位经验丰富的 Android 开发人员 (Kotlin),我目前正在开发一个 Java 应用程序,但我无法从共享首选项中获取简单的字符串。

这是我的代码

LoginActivity.java

public static final String USERNAME_KEY = "currentusername";

        vialApp.loginAsync(emailPasswordCredentials, it -> {
            // re-enable the buttons after user login returns a result
            binding.buttonLogin.setEnabled(true);
            binding.buttonCreate.setEnabled(true);
            if (!it.isSuccess()) {
                onLoginFailed(it.getError().getErrorMessage());
            } else {
                SharedPreferences pref = this.getPreferences(Context.MODE_PRIVATE);
                SharedPreferences.Editor edt = pref.edit();
                edt.putString(USERNAME_KEY, username);
                edt.apply();
                onLoginSuccess();
            }
        });

这是正确保存,如果我尝试以与在片段中相同的方式在此 activity 中获取首选项,它会获取用户名。此 activity 导航到主片段,然后导航到获取字符串的片段。

然而,在片段中:

private void getCurrentUsername() { // Called from OnViewCreated()
    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    String user = sharedPref.getString(LoginActivity.USERNAME_KEY, "username"); // NEED FIX
    binding.profilePicUsername.setText("Hello " + user + "!");
}

我尝试了在这里找到的所有内容,使用 PreferenceManager.getDefaultSharedPreferences、getSharedPreferences,使用上下文而不是 activity。没有任何效果。

您应该在 Activity:

中使用对 PreferenceManager 的引用
private SharedPreferences preferences;
preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

...和下​​面的片段:

private SharedPreferences preferences;
preferences = PreferenceManager.getDefaultSharedPreferences(getContext());