如题目所示,“登录页面”是用Activity做的,而整个底部导航栏乃至“我的页面”是用Fragment做的,乍一看没毛病。喵的,越往后做越离谱!
首先,第一个问题就是:Fragment包下没有 SharedPreferences,不能直接使用
解决方法:用getActivity() 方法获取所依附的 Activity,并从该 Activity 中获取 SharedPreferences 对象,进而间接使用 getSharedPreferences 方法。大致是以下这个样子滴~
private static final String PREFS_NAME = "MyPrefs";
private static final String KEY_USERNAME = "username";
Activity activity = getActivity();
SharedPreferences Sf = activity.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = Sf.edit();
editor.putString("username", KEY_USERNAME);
editor.apply();
其次,我又傻乎乎的去封装了一个SharedPreferencesUtils类,真的,像我这种写起代码来不管三七二十一,不知道有几人?如下:
public static String getUsername(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
return sharedPreferences.getString(KEY_USERNAME, "");
}
再次重申,"我的页面"是用Fragment做的,有没有看到getUsername中的参数?好的,没错,Fragment还得需要getContext() 方法获取到与该 Fragment 相关联的上下文 Context,继而使用这个上下文来调用 SharedPreferencesUtils.getUsername() 方法。
以下是让用户名显示在"我的"页面中的完整例子:
public class SharedPreferencesUtils {
private static final String PREFS_NAME = "MyPrefs";
private static final String KEY_USERNAME = "username";
private static final String KEY_PASSWORD = "password";
public static void saveUsernameAndPassword(Context context, String username,String password) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(KEY_USERNAME, username);
editor.putString(KEY_PASSWORD,password);
editor.apply();
}
public static String getUsername(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
return sharedPreferences.getString(KEY_USERNAME, "");
}
public static String getPassword(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
return sharedPreferences.getString(KEY_PASSWORD, "");
}
public static void clearCredentials(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove(KEY_USERNAME);
editor.remove(KEY_PASSWORD);
editor.apply();
}
}
//获取id
TextView textViewUsername = view.findViewById(R.id.my_name);
//调用Utils类中的方法,让用户名显示
textViewUsername.setText(SharedPreferencesUtils.getUsername(getContext()));
最后看一下效果图: