How to retrieve more than 1000 rows from Parse.com? How to retrieve more than 1000 rows from Parse.com? android android

How to retrieve more than 1000 rows from Parse.com?


I have figured out how to achieve my goal:

Declare Global Variable

private static List<ParseObject>allObjects = new ArrayList<ParseObject>();

Create Query

final ParseQuery parseQuery = new ParseQuery("Objects");parseQuery.setLimit(1000);parseQuery.findInBackground(getAllObjects());

Callback for Query

int skip=0;FindCallback getAllObjects(){    return new FindCallback(){        public void done(List<ParseObject> objects, ParseException e) {            if (e == null) {                allObjects.addAll(objects);                 int limit =1000;                if (objects.size() == limit){                    skip = skip + limit;                    ParseQuery query = new ParseQuery("Objects");                    query.setSkip(skip);                    query.setLimit(limit);                    query.findInBackground(getAllObjects());                }                //We have a full PokeDex                else {                    //USE FULL DATA AS INTENDED                }        }    };}


Here is a JavaScript version without promises..

These are the global variables (collections are not required, just a bad habit of mine)..

   ///create a collection of cool things and instantiate it (globally)    var CoolCollection = Parse.Collection.extend({       model: CoolThing    }), coolCollection = new CoolCollection();

This is the "looping" function that gets your results..

//recursive call, initial loopCount is 0 (we haven't looped yet)function getAllRecords(loopCount){    ///set your record limit    var limit = 1000;    ///create your eggstra-special query     new Parse.Query(CoolThings)            .limit(limit)            .skip(limit * loopCount) //<-important            .find({             success: function (results) {                 if(results.length > 0){                     //we do stuff in here like "add items to a collection of cool things"                     for(var j=0; j < results.length; j++){                         coolCollection.add(results[j]);                     }                     loopCount++; //<--increment our loop because we are not done                     getAllRecords(loopCount); //<--recurse                 }                 else                 {                     //our query has run out of steam, this else{} will be called one time only                     coolCollection.each(function(coolThing){                        //do something awesome with each of your cool things                     });                 }            },             error: function (error) {                //badness with the find             }         });}

This is how you call it (or you could do it other ways):

getAllRecords(0);


JAVA

So after 5 years, 4 months the above answer of @SquiresSquire needed some changes to make it work for me, and I would like to share it with you.

private static List<ParseObject>allObjects = new ArrayList<ParseObject>();
ParseQuery<ParseObject> parseQuery = new ParseQuery<ParseObject>("CLASSNAME");parseQuery.setLimit(1000);parseQuery.findInBackground(getAllObjects());
FindCallback <ParseObject> getAllObjects() {    return new FindCallback <ParseObject>() {        @Override        public void done(List<ParseObject> objects, ParseException e) {            if (e == null) {                allObjects.addAll(objects);                int limit = 1000;                if (objects.size() == limit) {                    skip = skip + limit;                    ParseQuery query = new ParseQuery("CLASSNAME");                    query.setSkip(skip);                    query.setLimit(limit);                    query.findInBackground(getAllObjects());                }                //We have a full PokeDex                else {                    //USE FULL DATA AS INTENDED                }            }        }        };