Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取ContentResolver.delete()调用上的随机IllegalArgumentException_Android_Android Contentprovider_Illegalargumentexception - Fatal编程技术网

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

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

在我的android应用程序中,我们有一个
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"/>