Android R适配过程中发现query的in语句异常

在查询媒体库的时候发现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')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值