gpt4 book ai didi

android - 如何处理来自 ContentResolver.applyBatch 的 "SQLiteException: null"?

转载 作者:太空狗 更新时间:2023-10-29 14:54:40 28 4
gpt4 key购买 nike

我已经实现了一个将数据写入 Android 联系人提供程序的 SyncAdapter。大多数情况下,这似乎工作正常,除了我的一小部分用户,每次 SyncAdapter 触发时他们都会看到应用程序崩溃!当我从这些设备(主要是运行 Android 5+ 的三星设备)恢复日志时,这是我看到的:

exception: android.database.sqlite.SQLiteException: null
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:181)
at android.database.DatabaseUtils.readExceptionWithOperationApplicationExceptionFromParcel(DatabaseUtils.java:160)
at android.content.ContentProviderProxy.applyBatch(ContentProviderNative.java:520)
at android.content.ContentProviderClient.applyBatch(ContentProviderClient.java:402)
at android.content.ContentResolver.applyBatch(ContentResolver.java:1297)

现在,ContentProviderProxy.applyBatch 似乎通过将其数据 bundle 到一条消息中来工作,该消息通过 IBinder 发送到负责管理联系人数据库的任何服务。反过来,它会收到一条返回的消息,然后将其传递给 DatabaseUtils.readExceptionWithOperationApplicationExceptionFromParcel。此函数检查回复,并根据传递的代码,应该在回复中抛出带有 String 消息的异常。不幸的是,在这种情况下,虽然服务在回复中设置了代码,但没有设置消息;这就是为什么我看到 SQLiteException: null 并且我不知道我做错了什么。

还有其他人遇到过这个错误吗?如果有,你能帮我缩小这种情况的范围吗?谢谢!

最佳答案

我遇到了。它是由联系人数据库损坏引起的。完整的细节是on my post to the Samsung Developers forum .

我发现的唯一解决方法是在您的同步方法中捕获 SQLiteException,然后通知用户他必须清除联系人数据库(他可能会丢失本地联系人!)。目的是:

Intent detailsIntent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
detailsIntent.setData(Uri.parse("package:com.android.providers.contacts"));

一旦数据被清除,联系人将重新同步,数据库将正确重建。

关于android - 如何处理来自 ContentResolver.applyBatch 的 "SQLiteException: null"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32793013/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com