3

在我的应用程序中,我使用以下代码将消息写入内部设备数据库: context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);

一些用户(目前仅在 Android 4.2.2 的 Nexus 7 上)报告了以下错误:

 java.lang.IllegalStateException: stableCount < 0: -1
    at android.os.Parcel.readException(Parcel.java:1433)
    at android.os.Parcel.readException(Parcel.java:1379)
    at android.app.ActivityManagerProxy.refContentProvider(ActivityManagerNative.java:2596)
    at android.app.ActivityThread.releaseProvider(ActivityThread.java:4608)
    at android.app.ContextImpl$ApplicationContentResolver.releaseProvider(ContextImpl.java:1997)
    at android.content.ContentResolver.insert(ContentResolver.java:875)

我找不到任何提示为什么会抛出此异常,也找不到它的含义。我能做些什么来避免这种情况(除了抓住它)或者有人可以解释这意味着什么?

在此先感谢,丹尼

4

1 回答 1

0

我遇到了类似的问题(java.lang.IllegalStateException: stableCount < 0: -1),但与你的有点不同,我的错是两次调用 Cursor.close() 。

对于 IContentProvider.insert 调用抛出异常,会导致调用 releaseProvider(provider); 所以我们应该首先找出为什么 IContentProvider.insert 会抛出异常。

 public final Uri insert(Uri url, ContentValues values)
{
    IContentProvider provider = acquireProvider(url);
    if (provider == null) {
        throw new IllegalArgumentException("Unknown URL " + url);
    }
    try {
        long startTime = SystemClock.uptimeMillis();
        Uri createdRow = provider.insert(mPackageName, url, values);
        long durationMillis = SystemClock.uptimeMillis() - startTime;
        maybeLogUpdateToEventLog(durationMillis, url, "insert", null /* where */);
        return createdRow;
    } catch (RemoteException e) {
        // Arbitrary and not worth documenting, as Activity
        // Manager will kill this process shortly anyway.
        return null;
    } finally {
        releaseProvider(provider);
    }
}
于 2019-03-29T03:39:43.613 回答