通过objectId以不同的顺序返回查询ParseObject?

时间:2014-05-20 05:18:04

标签: android parse-platform

我正在通过他们的objId查询一组ParseObjects。我已将所有objectIds添加到列表中。但是当Parse返回查询时,它不会按照我提供的objectIds的顺序返回它。有时确实如此,有时却没有。

我已经使用了Collections.reverse(),但这是毫无意义的,因为有时候对象会按照objIdList的顺序返回,有时它们不是。

有没有办法确保返回的ParseObjects-List与objIdList的顺序相同?

查询摘录

    ParseQuery<ParseObject> query = ParseQuery.getQuery("Alarm");
    query.whereEqualTo("user", user);
    //Collections.reverse(objIdList);
    query.whereContainedIn("objectId", objIdList);

    query.findInBackground(new FindCallback<ParseObject>() 
    {
        @Override
        public void done(List<ParseObject> objects, ParseException e) 
        {
            //Objects is a list of Alarms by the user that need to be added
            if(objects!=null)
            {

                pExistingAlarmList.addAll(objects);
                Collections.reverse(pExistingAlarmList);
            }
        }
    }

修改 我现在使用的解决方法是单独查询每个objectId。这非常有效。 但如果它可以在一个查询中完成它 我太棒了!

    ParseQuery<ParseObject> query = ParseQuery.getQuery("Alarm");
    query.whereEqualTo("user", user);
    // Retrieve the object by id
    query.getInBackground(objId, new GetCallback<ParseObject>()
    {
      public void done(ParseObject alarmObject, ParseException e) 
      {
        if (e == null) 
        {
            //Use alarmObject
        }
      }
    }

1 个答案:

答案 0 :(得分:0)

添加和Arraylist可以帮助,通过遍历每个对象将其objectId保存到arrayList。

ArrayList<String> objectsId = new ArrayList<String>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Alarm");
query.whereEqualTo("user", user);
query.whereContainedIn("objectId", objIdList);

query.findInBackground(new FindCallback<ParseObject>() 
{
    @Override
    public void done(List<ParseObject> objects, ParseException e) 
    {
        //Objects is a list of Alarms by the user that need to be added
        if(objects!=null)
        {
          for(ParseObject object : objects){
          String objectId = object.get("objectId");
          objectsId.add(objectId);
          }

        }
    }
}