【问题标题】:JSONObject getting truncated in AndroidJSONObject 在 Android 中被截断
【发布时间】:2012-11-02 12:31:04
【问题描述】:

我的应用程序正在尝试连接到 Salesforce API 并下拉其中存在的所有联系人。响应 json 对象有一个名为“totalSize”的键,它表示 33231 条记录。当我尝试以 JSONArray 的形式访问记录时,我的 JSONArray 仅包含 2000 条记录。 jsonobject 可能在某处被截断。你能帮忙吗?以下是我的代码。

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);

谢谢

【问题讨论】:

  • Json 对象很有可能被服务器截断,而不是被 Android 截断。因此,您可能希望在问题中包含有关您对服务器的调用的一些详细信息;您使用什么类型的 API(REST、SOAP、Bulk),您尝试执行哪个调用。如果问题出在服务器或 Android 上,为了明确问题,请尝试使用 wireshark 等工具嗅探您的网络通信,并检查服务器的实际响应。是包含 33231 条记录还是只有 2000 条记录。发布您的结果后它会帮助其他人帮助您,您甚至可以自己找到解决方案。

标签: android json salesforce


【解决方案1】:

salesforce 服务器以 2000 行块发送结果,响应结构的一部分是 nextRecordsUrl,其中包含指向下一页结果的 URL,您需要对其执行 GET 以获取下一组记录和以此类推,直到您获取整个结果集。

【讨论】:

    【解决方案2】:

    当您的服务器配置为(可能是默认情况下)响应有限数量的数据以响应网络调用时,通常会出现此类问题。例如,如果您使用 ASP.NET Web 服务,则默认 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 2020-08-09
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2016-04-29
      相关资源
      最近更新 更多