IllegalStateException:stableCount<写入设备数据库时0:-1

时间:2013-03-04 20:24:10

标签: android illegalstateexception android-contentresolver

在我的应用程序中,我使用以下代码将消息写入内部设备数据库: 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)

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

提前致谢, 丹尼

1 个答案:

答案 0 :(得分: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);
    }
}