我试图从解析表中删除一个特定的行, 我从解析表中获取对象并将其添加到arrayList, 当我点击列表视图时,我首先要检查我点击的那个值是否正确,那没关系,当我试图删除特定行时#&# 39; s总是删除最后一行 我做错了什么?
这是我的代码
ParseQuery<ParseObject> query = ParseQuery.getQuery("SmsTable");
for (int i = 0; i <cm.mList.size() ; i++) {
query.whereEqualTo("objectId", cm.mList.get(i));
}
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> objects, ParseException e) {
if (e == null) {
// iterate over all messages and delete them
for (ParseObject smsObject : objects) {
smsObject.deleteInBackground();
}
} else {
//Handle condition here
}
}
});
答案 0 :(得分:2)
查询仅支持每个字段的一个类型的约束。你现在在循环中做的事情基本上会覆盖你在循环的前一次迭代中设置的任何东西。
如果要查询多个ID,请使用whereContainedIn
约束并将objectIds作为列表传递。
所以不应该循环,这应该有效:
query.whereContainedIn("objectId", {YOUR_LIST_OF_IDS})
Query Constraints的文档中还有一个示例。
答案 1 :(得分:0)
您无法在Parse中访问objectId
属性。如果您致电object.get("objectId");
,您将获得空,这会强制您使用object.getObjectId()
。
这可能是query.whereEqualTo("objectId", cm.mList.get(i));
和query.whereContainedIn("objectId", {YOUR_LIST_OF_IDS})
不返回任何内容的原因。如果要从id列表中删除多个对象,最好的方法是
List<ParseObject> objects = new ArrayList<>();
for (String id : cm.mList) {
ParseObject object = ParseObject.createWithoutData("SmsTable", id);
objects.add(object);
}
ParseObject.deleteAllInBackground(objects);