SharedPreferences.Editor.apply 强制关闭

发布于 2024-10-17 17:16:29 字数 356 浏览 4 评论 0原文

我正在使用以下代码:

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

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

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

有人可以帮忙吗?

干杯,韦纳图

I am using the following code:

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

This works fine, but if I comment out the commit and uncomment the apply, the app force closes on my device with no error message, or exception thrown. Strangely, this runs fine in the emulator, under 2.2 and 2.3.3. It only closes on my Nexus one running 2.2.1

I have the workaround above, but am interested as to the cause of the close.

Can anyone help?

Cheers, Venatu

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟柳画桥 2024-10-24 17:16:29

apply() 是在 API 级别 9(又名 Android 2.3)中添加的。不要尝试在 Android 2.2 上使用它。

apply() was added in API level 9 (a.k.a., Android 2.3). Do not attempt to use it on Android 2.2.

南巷近海 2024-10-24 17:16:29

我使用这样的代码很简单:

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,所以我认为较旧的应该切换...

It’s simple I use kode like this:

if (respondsTo(editor, "apply")) invoke(editor, "apply”);
else editor.commit();

and then I have those two magic methods as static imports..

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

Commit runs while blocking UI so that can be problem if saving large data. I used background thread for commit (it’s problematic...) but now many users have 2.3 so I think older should switch...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文