获得部分Json响应

时间:2015-01-23 06:28:18

标签: java android json

我收到服务器端json响应加载我的菜单,我尝试了两次,它给出了此错误消息(错误解析数据org.json.JSONException)。

原因是我得到了部分响应,在两次尝试中我得到了不同的响应,如图中所示。我想我没有得到完整的json响应,只得到部分响应。我该怎么做才能得到完整的回复。

这是我的代码

@Override
protected JSONObject doInBackground(String... params) {

    String path = null;
    String response = null;
    HashMap<String, String> request = null;
    JSONObject requestJson = null;
    DefaultHttpClient httpClient = null;
    HttpPost httpPost = null;
    StringEntity requestString = null;
    ResponseHandler<String> responseHandler = null;

    // get the email and password


    try {
        path = "http://xxxxxxxxxxxxxxxxxxx";

        new URL(path);
    } catch (MalformedURLException e) {

        e.printStackTrace();
    }

    try {

        // set the API request
        request = new HashMap<String, String>();
        request.put(new String("CetegoryCode"), "P");
        request.entrySet().iterator();

        // Store locations in JSON
        requestJson = new JSONObject(request);
        httpClient = new DefaultHttpClient();
        httpPost = new HttpPost(path);
        requestString = new StringEntity(requestJson.toString());

        // sets the post request as the resulting string
        httpPost.setEntity(requestString);
        httpPost.setHeader("Content-type", "application/json");

        // Handles the response
        responseHandler = new BasicResponseHandler();
        response = httpClient.execute(httpPost, responseHandler);

        responseJson = new JSONObject(response);

    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    try {
        responseJson = new JSONObject(response);

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

    return responseJson;

}

这是图像

enter image description here

2 个答案:

答案 0 :(得分:0)

尝试以下代码来解析并获取JSON响应:

public static JSONObject getJSONFromUrl(String url) {
    // Making HTTP request
    try {
        URL url1 = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        // Starts the query
        conn.connect();
        InputStream stream = conn.getInputStream();
        json = convertStreamToString(stream);

        stream.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}

static String convertStreamToString(java.io.InputStream is) {
        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
        return s.hasNext() ? s.next() : "";
    }

在代码中使用以下getJSONFromUrl方法:

@Override
protected JSONObject doInBackground(String... params) {

    String path = null;
    String response = null;
    HashMap<String, String> request = null;
    try {
        responseJson = new JSONObject(response);
        responseJson =getJSONFromUrl("http://xxxxxxxxxxxxxxxxxxx?CetegoryCode=p");

     }catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }
 return responseJson;
}

答案 1 :(得分:0)

如果您的响应返回JsonArray,则需要设置响应字符串jsonarray。创建jsonarray的实例并用响应填充它。

如果它正常得到你可以在url中追加参数,比如查询字符串

protected Void doInBackground(String... urls) {

            /************ Make Post Call To Web Server ***********/
            BufferedReader reader = null;
            try {
                // Append parameters with values eg ?CetegoryCode=p
                String path = "http://xxxxxxxxxxxxxxxxxxx?CetegoryCode=p";
                URL url = new URL(path);
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                OutputStreamWriter wr = new OutputStreamWriter(
                        conn.getOutputStream());
                wr.write(data);
                wr.flush();

                // Get the server response

                reader = new BufferedReader(new InputStreamReader(
                        conn.getInputStream()));
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "");
                }

                Content = sb.toString();
                JSONArray jArray = new JSONArray(Content);
                if (jArray != null)
                    Log.e("Data", "" + jArray.length());
            } catch (Exception ex) {
                Error = ex.getMessage();
            } finally {
                try {

                    reader.close();
                }

                catch (Exception ex) {
                }
            }

            /*****************************************************/
            return null;
        }