在我的应用程序中,我使用以下代码将消息写入内部设备数据库: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)
我找不到任何提示,为什么会抛出这个异常,也不会意味着什么。有什么我可以做的,以避免这种情况(除了捕捉它)或有人可以解释这意味着什么?
提前谢谢,丹尼
我遇到了类似的问题(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);
}
}