无法从 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());
我是一位经验丰富的 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());