2012-11-02 88 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来获得下一组记录等,直到您获取了整个结果集。