我使用Parse.com作为我的后端,我想从服务器下载数据。我有过滤这些数据的标签。不幸的是它错了。假设我有两个标签“city1”和“city2”,现在我只获取“city1”的数据。
public ArrayList<Dataset> getDatasetFromServer(Context context) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Dataset");
List<String> cities = DatabaseAdapter.getCityNames(context);
//cities list contains "city1" and "city2"
query.whereContainedIn("cities", Arrays.asList(cities.toArray(new String[cities.size()])));
ArrayList<Dataset> dataset = new ArrayList<>();
try {
List<ParseObject> parseDataset = query.find();
dataset = setDatasetList(parseDataset);
} catch (ParseException e) {
e.printStackTrace();
}
return dataset;
}
问题在于:Arrays.asList(cities.toArray(new String[cities.size()])
。
不知道为什么,但这种转换对Parse
有误。
但是,如果我将上面的行更改为此
String[] array = {"city1", "city2"};
query.whereContainedIn("cities", Arrays.asList(array));
一切正常,我获得了city1和city2的数据。 我的问题是,这两个解决方案之间有什么区别以及如何解决这个问题,以便第一个解决方案有效?
编辑: 这也行不通:
query.whereContainedIn("cities", DatabaseAdapter.getCityNames(context));
getCityNames
返回List<String>
答案 0 :(得分:1)
不要将列表转换为数组,然后返回列表,而是执行此操作:
query.whereContainedIn("cities", cities);
答案 1 :(得分:0)
问题是我的错。两种解决方案都很好。
它没有奏效的原因是我的方法
DatabaseAdapter.getCityNames(context)
在我没看到的第二个元素的开头放了一个空格。