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