invalid token XXX

最近在修改公司的老项目,项目中对于通讯录的内容进行了查询操作,之前一直都运行的很正常,突然这两天出现了运行crash或者无法查询到正确信息,甚至无法查询到信息的问题,最终通过两个问题的修改,发现了共同点

其问题虽然错误现象不同,但报错信息几乎一致

在crash中报错信息为"invalid token LIMIT",而在无法查询到通讯录的信息中报错信息则为"invalid token deleted",

经最终确认发现:该类问题的错误信息主要是在代码的调用过程中,查询数据库时,使用了sql语句,且sql语句中包含了String字符串的拼接,而“limit”、“deleted”字符已经无法在R版本后被识别,无法直接拼接,因此导致sql语句查询报错,从而引发了后续的错误信息

修改方案如下:以limit为例

原始的报错的代码如下:

Uri uri = Uri.withAppendedPath(Calls.CONTENT_FILTER_URI,
                Uri.encode(normalizedNumber));
String orderByAndLimit = Calls.DATE + " DESC LIMIT " + mMaxToRetrieve;
Cursor cursor = getContext().getContentResolver().query(uri, null, null, null,
                orderByAndLimit);

修改后的正确的代码如下:

Uri uri = Uri.withAppendedPath(Calls.CONTENT_FILTER_URI,
                Uri.encode(normalizedNumber))
                .buildUpon()
                .appendQueryParameter(Calls.LIMIT_PARAM_KEY, mMaxToRetrieve + "")
                .build();
String orderByAndLimit = Calls.DATE + " DESC";
Cursor cursor = getContext().getContentResolver().query(uri, null, null, null,
                orderByAndLimit);

结论:问题并不复杂,且修改方式也并不复杂,但目前还是没搞明白为什么不能如此拼接关键字,也算是一个遗留问题,后续解决

遗留问题:为什么不能使用limit等关键字了?还有其他的关键字是否可以使用?为什么?不能使用这些关键字的原因(初衷)是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值