Android 获取ContentResolver.delete()调用上的随机IllegalArgumentException
在我的android应用程序中,我们有一个Android 获取ContentResolver.delete()调用上的随机IllegalArgumentException,android,android-contentprovider,illegalargumentexception,Android,Android Contentprovider,Illegalargumentexception,在我的android应用程序中,我们有一个ContentProvider,其中有几个表,每个内容解析器调用都是针对相同的URI列表(每个表一个)进行的,并且所有这些URI都可以在测试环境中正常工作。我无法重现该漏洞,但从Google Play,我们不时会发现这一崩溃: java.lang.IllegalArgumentException: Unknown URL content://com.myapp.urimanager.data/location at android.content.Con
ContentProvider
,其中有几个表,每个内容解析器调用都是针对相同的URI列表(每个表一个)进行的,并且所有这些URI都可以在测试环境中正常工作。我无法重现该漏洞,但从Google Play,我们不时会发现这一崩溃:
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);
正如我所说的,我无法在办公室里重现这种情况,而且这种情况也不经常发生,但它还是会崩溃
这种情况发生在每个Android版本(2.3.7、4.04、4.1、4.2、4.3、4.4)和各种设备(索尼Xperias、三星Galaxy、Moto、阿尔卡特、LG Optimus等)上
有人知道为什么会这样吗
我知道我可以简单地
try catch
这个调用,但我不认为这是正确的方法,因为它会简单地将崩溃推迟到下一个调用(这个delete
是在每次应用启动时启动的一个清理序列)。您是否编写了底层ContentProvider
?听起来可能有问题。是的,我有。但是它是一个非常简单的匹配器,可以匹配/location
或/people
或\upload
。堆栈跟踪永远无法到达它,它在Android.content.ContentResolver.delete(ContentResolver.java:818)的Android框架代码中崩溃了调用ContentResolver#delete
时myUri的值是多少?正如我所说的,我无法重新编程,但是异常消息和我期望的内容与java.lang.IllegalArgumentException:Unknown URL匹配content://com.myapp.urimanager.data/location
<provider
android:name=".geo.ContentManager"
android:authorities="com.myapp.urimanager.data"
android:enabled="true"
android:exported="false"
android:multiprocess="true"/>