我在MainActivity.Java中从ContactView.Java读取SharedPreference时遇到了麻烦
这是我在ContactView.Java中的内容:
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("contactName", name);
editor.putString("contactPhone", phoneNo);
editor.commit();
并在我的OnCreate中将它们设置为TextViews:
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
String name = settings.getString("contactName", "");
//the second parameter set a default data if “contactName” is empty
if (!name.isEmpty()){
textView1.setText(name);
}
String phoneNo = settings.getString("contactPhone", "");//the second parameter set a default data if “contactName” is empty
if (!phoneNo.isEmpty()){
textView2.setText(phoneNo);
}
现在,当我去MainActivity时,我想阅读它们:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String phoneNo = sharedPreferences.getString("contactPhone", "");
String name = sharedPreferences.getString("contactName", "");
但是Strings似乎是空的,不包含任何名字或电话没有我做错了什么?
答案 0 :(得分:3)
您正在访问2个不同的SharedPreferences文件。
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
与
不同SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
使用
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
随处可见。
答案 1 :(得分:2)
在您的MainActivity中,您应该使用相同的首选项文件:
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
String phoneNo = settings.getString("contactPhone", "");
String name = settings.getString("contactName", "");
答案 2 :(得分:1)
在两个活动A和B中,您可以通过以下方式使用共享首选项。
在活动A中,您可以创建共享首选项
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("contactName", name);
editor.putString("contactPhone", phoneNo);
editor.commit();
在活动B中,您可以使用具有相同名称的共享首选项
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
String phoneNo = settings .getString("contactPhone", "");
String name = settings .getString("contactName", "");
答案 3 :(得分:0)
1-您可以非常轻松地创建自定义类,以便在SharedPreference中添加,检索,检查和删除数据。
public class Pref_Storage {
private static SharedPreferences sharedPreferences = null;
public static void openPref(Context context) {
sharedPreferences = context.getSharedPreferences(context.getResources().getString(R.string.app_name),
Context.MODE_PRIVATE);
}
public static void deleteKey(Context context, String key) {
HashMap<String, String> result = new HashMap<String, String>();
Pref_Storage.openPref(context);
for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll()
.entrySet()) {
result.put(entry.getKey(), (String) entry.getValue());
}
boolean b = result.containsKey(key);
if (b) {
Pref_Storage.openPref(context);
Editor prefsPrivateEditor = Pref_Storage.sharedPreferences.edit();
prefsPrivateEditor.remove(key);
prefsPrivateEditor.commit();
prefsPrivateEditor = null;
Pref_Storage.sharedPreferences = null;
}
}
public static void setDetail(Context context, String key, String value) {
Pref_Storage.openPref(context);
Editor prefsPrivateEditor = Pref_Storage.sharedPreferences.edit();
prefsPrivateEditor.putString(key, value);
prefsPrivateEditor.commit();
prefsPrivateEditor = null;
Pref_Storage.sharedPreferences = null;
}
public static Boolean checkDetail(Context context, String key) {
HashMap<String, String> result = new HashMap<String, String>();
Pref_Storage.openPref(context);
for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll()
.entrySet()) {
result.put(entry.getKey(), (String) entry.getValue());
}
boolean b = result.containsKey(key);
return b;
}
public static String getDetail(Context context, String key) {
HashMap<String, String> result = new HashMap<String, String>();
Pref_Storage.openPref(context);
for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll()
.entrySet()) {
result.put(entry.getKey(), (String) entry.getValue());
}
String b = result.get(key);
return b;
}
}
对于设定数据:
Pref_Storage.setDetail(context, "contactName", name);
Pref_Storage.setDetail(context, "phoneNo", phoneNo);
用于检索数据:
Pref_Storage.getDetail(context, "contactName");
Pref_Storage.getDetail(context, "phoneNo");
用于检查数据:
Pref_Storage.checkDetail(context, "contactName");
Pref_Storage.checkDetail(context, "phoneNo");
删除数据:
Pref_Storage.deleteKey(context, "contactName");
Pref_Storage.deleteKey(context, "phoneNo");