You need to sign in to do that
Don't have an account?
Getting More than 2000 records in native Android app
I'm in a tricky situation where my org has more than 2,000 records for objects which I'm trying to fetch in my Android native app
RestRequest restRequest = RestRequest.getRequestForQuery( getString(R.string.api_version), soql);
and then I get the response using
RegistrationActivity.client.sendAsync(restRequest, new AsyncRequestCallback() { @Override public void onSuccess(RestRequest request, RestResponse result) { }
This approach suffers the limitation that it can only return 2,000 records in the SOQL. In the response, I'm getting the nextRecordsUrl in the response and I can retrieve it as
nextRecordsUrl =result.asJSONObject().getString("nextRecordsUrl").toString();
Now, my understanding is that I will need to fire HTTP GET requests to this URL using this approach
Http h = new Http(); HttpRequest req = new HttpRequest(); req.setEndpoint("http://na1.salesforce.com" + nextRecordsUrl); req.setMethod('GET'); req.setHeader('Authorization', 'OAuth ' + UserInfo.getSessionId()); req.setHeader('Content-Type', 'application/json'); HttpResponse res = h.send(req);
and then parse the response.
While this approach is theoretically possible, I'm not very keen on mixing 2 approaches - getting the initial records using RestClient getRequestForQuery() method and follow up data (more than 2,000 records) using the HttpRequest method.
Can anyone guide me on the correct/ coherent way of fetching object data (more than 2,000 records) in a native force.com Android app?
You can construct a RestRequest in Android by passing in your URL like the snippet below:
'path' represents the endpoint you're trying to hit. You can use client.getAsync() too, if you want to make an async call.
All Answers
If you don't mind reading a little objective-c and converting to Android this is how I do it:
Essentially just create the Salesforce API RestRequest yourself and set the path to that URL. This way you get the oauth goodness of the API. Not sure if you can do the equivalent of this in Android but I'd be surprised if you couldn't.
Thank you for the suggestion however the problem is that the Android RestClient class does not take a URL as input. Having more than 2,000 records is a common scenario so I'm looking for the right way to do it.
It's not the rest client that needs to the url it's RestRequest
Does the Android version let you create RestRequest without parameters. ie:
?
Pardon my pseudo code that's the rough equivalent of the objective-c code I posted.
You can construct a RestRequest in Android by passing in your URL like the snippet below:
'path' represents the endpoint you're trying to hit. You can use client.getAsync() too, if you want to make an async call.
While this is a stop gap solution, I really do think that this needs to be handled in the getRequestForQuery() method itself by making it capable of accepting large record sets. Thoughts?