2012-11-02 83 views
0

我的應用程序正試圖連接到Salesforce API並下拉其中存在的所有聯繫人。響應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上,請嘗試使用wireshark等工具嗅探您的網絡通信,並檢查服務器的實際響應情況,以便獲得清晰的結果。它是否包含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響應會去達到5MB,但要確保你也增加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來獲得下一組記錄等,直到您獲取了整個結果集。