在查询媒体库的时候发现query会报异常,
StringBuilder where = new StringBuilder();
where.append("_data" + " IN (");
for (int i = 0; i < videoPaths.length; i++) {
where.append("\"" + videoPaths[i]);
if (i < videoPaths.length - 1) {
where.append("\",");
}
}
where.append("\")");
Cursor cursor = null;
try {
cursor = getActivity().getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null,
where.toString(), null, null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i(TAG, e.getMessage());
}
where是 _id IN ("254","226","230")
2021-01-30 20:28:13.231 27938-27938/com.aidroid.video W/System.err: java.lang.IllegalArgumentException: Invalid token 254
2021-01-30 20:28:13.231 27938-27938/com.aidroid.video W/System.err: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172)
2021-01-30 20:28:13.231 27938-27938/com.aidroid.video W/System.err: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
2021-01-30 20:28:13.231 27938-27938/com.aidroid.video W/System.err: at android.content.ContentProviderProxy.query(ContentProviderNative.java:472)
2021-01-30 20:28:13.231 27938-27938/com.aidroid.video W/System.err: at android.content.ContentResolver.query(ContentResolver.java:1183)
2021-01-30 20:28:13.231 27938-27938/com.aidroid.video W/System.err: at android.content.ContentResolver.query(ContentResolver.java:1115)
2021-01-30 20:28:13.232 27938-27938/com.aidroid.video W/System.err: at android.content.ContentResolver.query(ContentResolver.java:1071)
2021-01-30 20:28:13.232 27938-27938/com.aidroid.video W/System.err: at com.aidroid.video.myplaylist.PlaylistDetailBaseFragment.getVideoInfosByVideoPaths(PlaylistDetailBaseFragment.java:327)
然后我尝试直接通过命令查询,发现下面的命令是可以正常运行的.
select * from video where _id IN ("623", "596");
那in语句应该是可以正常执行的,在经过尝试发现如果将双引号修改为单引号就OK了( "\""修改为"\'" )
StringBuilder where = new StringBuilder();
where.append("_id" + " IN (");
for (int i = 0; i < videoPaths.length; i++) {
where.append("\'" + videoPaths[i]); // 替换为单引号
if (i < videoPaths.length - 1) {
where.append("\',"); // 替换为单引号
}
}
where.append("\')"); // 替换为单引号
Log.i(TAG, where.toString());
where是 _id IN ('254','226','230')