SharedPreferences.Editor.apply力关闭

问题描述:

我使用下面的代码:SharedPreferences.Editor.apply力关闭

SharedPreferences.Editor edit = mPrefs.edit(); 
edit.putString("UUID", UUID.randomUUID().toString()); 
edit.commit(); 
//edit.apply(); 

这工作得很好,但如果我注释掉的承诺,并取消对应用,应用力我的设备上关闭,并没有错误消息或抛出的异常。奇怪的是,这在2.2和2.3.3的模拟器中运行良好。它只在我运行的Nexus one上关闭2.2.1

我有上面的解决方法,但对结束的原因感兴趣。

任何人都可以帮忙吗?

干杯,Venatu

+2

任何强制关闭意味着你有你的日志中详细的堆栈跟踪。请张贴。 – EboMike

apply()在API级9(又名,机器人2.3)中的溶液。不要试图在Android 2.2上使用它。

+0

Doh!我不认为这会很简单。谢谢回复 – Venatu

很简单我用科德这样的:

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; 
    } 
} 

提交运行,同时阻挡界面,因此可以问题,如果节省大量数据。我使用后台线程提交(这是有问题的...),但现在很多用户有2.3,所以我认为老年人应该切换...