【问题标题】:JSON response cutting off part way throughJSON 响应中途中断
【发布时间】:2013-06-28 15:00:37
【问题描述】:

当下载一个 JSON 数组时,它会切断字符串的 1/4,它相当大 - 但它应该获取整个字符串。

LogCat 中没有抛出错误。这是我正在使用的方法,我已经通过它几次,看不出它被切断的原因。不过,我对此很陌生。

public static JSONArray getJSONfromURL(String url){

    //initialize
    InputStream is = null;   
    String result = "";   
    JSONArray jArray = null;

    //http post
    try {

        HttpClient httpclient = new DefaultHttpClient();   
        HttpPost httppost = new HttpPost(url);    
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();

        is = entity.getContent();    

    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection "+e.toString());   
    }
    //convert response to string

    try {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);  
        StringBuilder sb = new StringBuilder();   
        String line = null;

        while ((line = reader.readLine()) != null) {   
            sb.append(line + "\n");
        }

        is.close();
        result=sb.toString();

    } catch (Exception e) {    
        Log.e("log_tag", "Error converting result "+e.toString());
    }
    //try parse the string to a JSON object

    try {
        Log.d("log_tag", "jresult: " + result + "finish");
        jArray = new JSONArray(result);

        //Log.e("log_tag", "result: " + jArray.toString());

    } catch (JSONException e) {
        Log.e("log_tag", "Error parsing data "+e.toString());
    }

    return jArray;
}

我认为一旦破解,我就会被设置。我也会把它变成一个类,以便在未来的项目中使用,所以我不必继续重建它!

编辑:应该将标记添加到地图的 For 循环:

try{
        for(int i=0;i<arrayResultFromURL.length();i++){
            JSONObject json_data = arrayResultFromURL.getJSONObject(i);

            // assign attributes from the JSON string to local variables
            String id =json_data.getString("id");
            String title =json_data.getString("title");
            String strap =json_data.getString("strap");
            Double lat = (double) json_data.getDouble("lat");
            Double lon = (double) json_data.getDouble("long");

            theMap.addMarker(new MarkerOptions()
            .position(new LatLng(lat, lon))
            .title(title)
            .snippet(strap));
        }
    }catch (Exception e){
        Log.e("log_tag", "error in array: " + e.toString());
    }

【问题讨论】:

  • 结果返回什么,预期结果是什么?
  • 它应该返回所有这些 pastebin.com/KLr2Czsb 并将其削减到 pastebin.com/bgSqbNxi 的 1/4
  • 我看不出代码有什么问题。尝试记录结果并检查
  • logcat 绝对不会输出所有内容。我也有巨大的 JSON 字符串被截断,通常大约 1000 个字符。
  • @romo 这可能是一种可能性,并非所有标记都显示在地图上(将使用 for 循环添加它们来更新我的问题,但它们一切都很好,因为它们显示在iOS 应用)

标签: java android json


【解决方案1】:

也许您的问题来自您处理响应对象的方式。检查这个thread

如果没有,请先尝试检查响应的大小,看看您是否收到了全部。

httpResponse.getEntity().getContentLength()

另外,如果你不知道有一个很好的库(自从我发现它就一直在使用它),它可以简化 json 解析,请查看here

【讨论】:

    【解决方案2】:

    这类事情最好由 GSON 或 Jackson 等库来完成

    另外,如果您的目标是创建一个JSONArray,那么有一个构造函数接受JSONTokener。 JSONTokener 可以反过来从您的 InputStream 构造。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多