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

问题描述 投票:3回答:1

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

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

提前谢谢,丹尼

android illegalstateexception android-contentresolver
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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.