【问题标题】:SharedPreferences.Editor.apply force closesSharedPreferences.Editor.apply 强制关闭
【发布时间】:2011-02-16 00:01:06
【问题描述】:

我正在使用以下代码:

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

这工作正常,但如果我注释掉提交并取消注释应用,应用程序强制在我的设备上关闭,没有错误消息或抛出异常。奇怪的是,这在 2.2 和 2.3.3 下的模拟器中运行良好。它只在我运行 2.2.1 的 Nexus 上关闭

我有上述解决方法,但对关闭的原因很感兴趣。

谁能帮忙?

干杯,维纳图

【问题讨论】:

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

标签: java android android-emulator nexus-one


【解决方案1】:

apply() 已添加到 API 级别 9(也称为 Android 2.3)。不要尝试在 Android 2.2 上使用它。

【讨论】:

  • 噢!我没想到会这么简单。感谢回复
【解决方案2】:

很简单,我是这样使用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 所以我认为老年人应该切换......

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多