所以我实现了一个通用的SharedPreferences类,它将一些文本序列化并将其保存在SharedPreferences String字段中。它在运行Android 4.4.2的HTC One M8设备上运行良好。但是,当我在运行根姜饼(2.2)的三星Galaxy S1上进行测试时,它总会返回" null"在读取字符串时。什么想法可能是错的?
如果我在保存之后尝试加载(在同一个过程中),则返回字符串。只有当我杀死进程并重新启动时,它才会消失。注意:从设备重新启动。不重新编译/重新部署。怪异。
代码:
import android.content.Context;
import android.content.SharedPreferences;
import com.myapp.Container.
/**
*/
public class SharedPrefsSavable {
private final static String PrefsKey = "com.myapp";
public static <T> T load(Class type, Context context) {
SharedPreferences prefs = context.getSharedPreferences(PrefsKey, Context.MODE_PRIVATE);
T userData = null;
try {
String key = getPreferencesId(type);
String stringData = prefs.getString(key, null);
if (stringData != null) {
userData = (T) Container.Serializer.deserialize(type, stringData);
}
}
catch (Exception ex)
{
Container.Log.w("Unable to deserialize " + type + ": " + ex.getMessage());
}
if (userData == null) {
try {
userData = (T) type.newInstance();
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}
return userData;
}
public void save(Context context) {
SharedPreferences prefs = context.getSharedPreferences(PrefsKey, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
String asString = Container.Serializer.serialize(this);
String objectKey = getPreferencesId();
editor.putString(objectKey, asString);
editor.commit();
}
private static String getPreferencesId(Class<? extends SharedPrefsSavable> type) {
return type.getName();
}
public String getPreferencesId() {
return SharedPrefsSavable.getPreferencesId(this.getClass());
}
}
答案 0 :(得分:0)
试试这个,
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences( context);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString( "Key", "value" );
// retrive
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( context);
String value = prefs.getString("key","default" );
答案 1 :(得分:0)
红鲱鱼 - 这是我的设备特有的一个问题,由于多次重装不能完全应对,因此有一些腐败状态。留下这个答案,以防其他人遇到同样的问题。
基本上我在
监控文件/dbdata/databases/com.myapp/shared_prefs/com.myapp_preferences.xml
我注意到它从未改变过。我卸载了该应用并完全删除了/dbdata/databases/com.myapp
,然后重新安装。文件被重新创建,这次它工作。所以我猜测以前的安装中存在陈旧的文件/文件夹,我的应用程序现在无权更改。