2012-11-02 3 views
0

Мое приложение пытается подключиться к API Salesforce и отключить все существующие в нем контакты. У объекта json ответа есть ключ под названием totalSize, который содержит 33231 записей. Когда я пытаюсь получить доступ к записям как JSONArray, мой JSONArray содержит только 2000 записей. Где-то jsonobject может быть усечен. Вы можете помочь. Следующий мой код.JSONObject, усеченный в Android

JSONObject asJSONObject = new JSONObject(new JSONTokener(result)); 
int totalRecordsSize = Integer.parseInt(asJSONObject.getString("totalSize")); 
System.out.println("JSON_RESULT_SIZE : "+totalRecordsSize); 
JSONArray array = (JSONArray)asJSONObject.get("records"); 
int count = array.length(); 
System.out.println("JSON_ARRAY_SIZE : "+count); 

Благодаря

+0

Существует хорошая вероятность того, что объект Json будет усечен сервером, а не Android. Следовательно, вы можете включить в свой вопрос некоторые сведения о вашем вызове на сервер; какой тип API вы используете (REST, SOAP, Bulk), с которым вы пытались это сделать. И чтобы получить четкое разрешение, если проблема на сервере или Android, попробуйте обнюхать свою сетевую связь с помощью инструментов, таких как wirehark, и проверить свой фактический ответ с сервера. Включает ли он 33231 записей или только 2000. После публикации вашего результата это поможет другим помочь вам, вы даже можете найти решение самостоятельно. – nheimann1

ответ

0

Обычно такие вопросы возникает, когда сервер настроен (возможно, по умолчанию), чтобы ответить ограниченное количество данных в ответ на веб-вызова. Например, если вы используете ASP.NET webservice, тогда длина ответа Json по умолчанию ограничена 100kb. Тем не менее, вы можете перезаписать этот предел, просто увеличивая длину отклика в вашем web.config:

<system.web.extensions> 
    <scripting> 
     <webServices> 
     <jsonSerialization maxJsonLength="5242880"/> <!-- 5MB --> 
     </webServices> 
     <scriptResourceHandler enableCompression="true" enableCaching="true" /> 
    </scripting> 
</system.web.extensions> 

С выше конфигурации, мой ответ JSON будет идти до 5 МБ, но убедитесь, что вы также увеличить соединение HTTP тайм-аут значения при работе с огромным количеством данных. Например:

HttpParams httpParams = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpParams, 60000); //1 minute 
HttpConnectionParams.setSoTimeout(httpParams, 60000);   //1 minute 
HttpClient client = new DefaultHttpClient(httpParams); 
+0

причина проголосовать? – waqaslam

2

Сервер Salesforce отправляет результаты в 2000 кусков строк, часть структуры ответа является nextRecordsUrl, который содержит URL-адрес на следующую страницу результатов, вы должны сделать GET на то, чтобы получить следующий набор записей и т. д., пока вы не получите весь набор результатов.

Смежные вопросы