如何使用android解析sdk从解析表中获取随机行(解析对象)?

时间:2015-07-16 08:54:47

标签: android parse-platform

我在解析类或表上有500条记录,现在需要从500条记录中获取10条随机记录?

请告诉我该怎么做。

 ParseQuery<ParseObject> query = ParseQuery.getQuery(parseTableName);
 query.setLimit(10);
 query.findInBackground(new FindCallback<ParseObject>() {
     @Override
     public void done(List<ParseObject> parseObjects,com.parse.ParseException e) {
     }
 }

3 个答案:

答案 0 :(得分:3)

最好的方法可能是编写一个下载500个对象的CloudCode模块,然后随机选择10个以在响应中发送到您的Android应用程序。这比将500个对象下载到您的设备并选择10更好。

自从我编写CloudCode以来已经有一段时间了,但是您可以执行以下操作。

在iOS应用程序中

(你可以做一些工作来找到Android等价物):

[PFCloud callFunctionInBackground:@"get500obj" withParameters:@{} block:^(id result, NSError *error) {
   // do something with result
}];
在CloudCode中(这应该被视为伪代码,因为它未经测试):

Parse.Cloud.define('get500obj', function(request, response) {
    // for getting random element
    Array.prototype.randomElement = function () {
        return this[Math.floor(Math.random() * this.length)]
    }

    var query = new Parse.Query("your-object-class-name");
    query.find({
        success: function(results) {
            var final10 = [];
            for (var i = 0; i < 10; i++) {
                var myRandomElement = results.randomElement()
                if (final10.indexOf(myRandomElement) == -1) {
                    final10.push(myRandomElement);
                } else {
                    i--;
                }
            }
            response.success(final10);
        },
        error: function() {
            response.error(error);
        }
    });
});

答案 1 :(得分:1)

这是一个Objective C代码示例。

PFQuery *query = [PFQuery queryWithClassName:@"MyTable"];
int count = [query countObjects];

int r = arc4random_uniform(count);

PFQuery *query2 = [PFQuery queryWithClassName:@"MyTable"];
query2.skip = r;

PFObject *result = [query2 getFirstObject];

`

答案 2 :(得分:0)

这是用于从Parse

中的给定类中获取随机对象的工作代码

在云代码中,

Parse.Cloud.define("get10Obj",function(request,response)
{ 

query = new Parse.Query(request.params.movie);

Array.prototype.randomElement = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}


query.find ({

success: function(results) {

        var final10 = [];

        for (var i = 0; i < 5; i++) {
            var myRandomElement = results.randomElement(0,results.length);

            if (final10.indexOf(myRandomElement) == -1) {
                final10.push(myRandomElement);
            } else {
                i--;
            }
        }
         var datalist =[];

        for(var j=0;j<final10.length;j++)
        {
            var index= final10[j];
            datalist.push(results[index]);
        }   

        response.success(datalist);
    },
    error: function() {
        response.error(error);
      }
    });
  });

在Android中,

    HashMap<String, Object> params = new HashMap<String, Object>();
    params.put("movie", "The Matrix");

    ParseCloud.callFunctionInBackground("averageStars", params, new
       FunctionCallback<ParseObject>() {
      void done(ParseObject ratings, ParseException e) {
       if (e == null) {
          // Do your stuff
          }
      }
   });

感谢st.derrick的最大提示。