如何在android中过滤内容解析器查询结果?传递选择参数仍然不起作用

时间:2015-04-03 20:49:41

标签: android sql android-contentresolver

我试图根据传递的选择参数提交城市名称并返回匹配的城市。

但是查询调用仍会返回所有行。甚至尝试输入一个在数据库中已经存在的虚假城市名称,它仍然会吐出相同的原始行。

public void addLocation(String cityName){
    Cursor cursor = mContext.getResolver().query(
            WeatherContract.LocationEntry.CONTENT_URI,
            null,
            WeatherContract.LocationEntry.COLUMN_LOCATION_SETTING + 
            " = " + cityName,
            null,
            null);

我一遍又一遍地阅读Android文档,ContentResolver Query,并且传递选择参数似乎没有做任何事情。

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

2 个答案:

答案 0 :(得分:0)

不是在选择参数中传递值,而是将其放在selectionArgs。

public void addLocation(String cityName){
    String[] args = { cityName };
    Cursor cursor = mContext.getResolver().query(
            WeatherContract.LocationEntry.CONTENT_URI,
            null,
            WeatherContract.LocationEntry.COLUMN_LOCATION_SETTING + 
            " = ?",
            args,
            null);

答案 1 :(得分:0)

假设您使用的提供者为androidx.core.content.FileProvider(根据您在清单中声明的​​内容),{的selectionselectionArgssortOrder参数{1}} ...在AndroidX的实现中被忽略

请参见v1.2.0源here(第409行)

我发现的唯一解决方案是使用您自己的代码对查询后的结果进行过滤和排序。 是的,这有点可悲...