在ContentResolver.delete()调用上获取随机的IllegalArgumentException

时间:2014-07-21 14:46:53

标签: android android-contentprovider illegalargumentexception

在我的Android应用程序上,我们有一个带有几个表的ContentProvider,每个内容解析器调用都是针对相同的URI列表(每个表一个)完成的,所有这些都在测试环境时工作正常。我无法重现这个错误,但是从GooglePlay中我们每隔一段时间就会遇到这个错误:

java.lang.IllegalArgumentException: Unknown URL content://com.myapp.urimanager.data/location
at android.content.ContentResolver.delete(ContentResolver.java:818)
at com.myapp.geo.GeocodeProvider$MyHandler.handleMessage(GeocodeProvider.java:225)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)

此崩溃的具体行只是对DB的简单DELETE请求:

long when = System.currentTimeMillis() - (3 * MONTH);
String where = DbLocation.COL_TS + "<" + Long.toString(when);
int rowsDeleted = context.getContentResolver().delete(myUri, where, null);

myUri是对崩溃URI的引用,并且在清单上正确声明了ContentProvider:

   <provider
      android:name=".geo.ContentManager"
      android:authorities="com.myapp.urimanager.data"
      android:enabled="true"
      android:exported="false"
      android:multiprocess="true"/>

正如我所说,我无法在办公室重现这种情况,但这种情况并不经常发生,但仍会崩溃。

这种情况发生在每个Android版本(2.3.7,4.04,4.1,4.2,4.3,4.4)和各种设备(Sony Xperias,Samsung Galaxy,Moto,Alcatel,LG Optimus等)上。

有人知道为什么会这样吗?

我知道我可以简单地try-catch来电,但我不相信这是正确的方法,因为它只会将崩溃推迟到下一个电话会议({{1} }是每个应用程序启动时启动的清理序列。)

0 个答案:

没有答案