我使用以下代码:
SharedPreferences.Editor edit = mPrefs.edit();
edit.putString("UUID", UUID.randomUUID().toString());
edit.commit();
//edit.apply();
这样可以正常工作,但是如果我注释掉提交并取消注释应用,则应用程序强制在我的设备上关闭,没有错误消息或抛出异常。奇怪的是,这在模拟器中运行良好,在2.2和2.3.3之下。它仅在运行2.2.1
的Nexus上关闭我有上面的解决方法,但我对结果的原因感兴趣。
有人可以帮忙吗?
干杯,Venatu
答案 0 :(得分:4)
apply()
。请勿尝试在Android 2.2上使用它。
答案 1 :(得分:0)
这很简单我就像这样使用kode:
if (respondsTo(editor, "apply")) invoke(editor, "apply”);
else editor.commit();
然后我将这两种魔术方法作为静态导入..
public static boolean respondsTo(Object object, String methodName) {
try {
object.getClass().getMethod(methodName, (Class<?>[]) null);
return Yes;
} catch (NoSuchMethodException e) {
return No;
}
}
public static Object invoke(Object object, String methodName) {
try {
return object.getClass().getMethod(methodName, (Class<?>[]) null).invoke(object);
} catch (Exception e) {
return INVOKE_FAILED;
}
}
提交在阻止UI时运行,因此在保存大数据时可能会出现问题。我使用后台线程进行提交(这是有问题的......)但是现在很多用户都有2.3所以我认为旧的应该切换...