Android-从POST请求读取JSON

Android-从POST请求读取JSON,android,json,post,Android,Json,Post,我需要在Android中捕获来自POST请求的JSON响应 这是我目前的代码: String data = null; try { data = URLEncoder.encode("Field1", "UTF-8") + "=" + URLEncoder.encode(field1, "UTF-8"); data += "&" + URLEncoder.encode("Field2", "UTF-8") + "=

我需要在Android中捕获来自
POST
请求的
JSON
响应

这是我目前的代码:

String data = null;
    try {
        data = URLEncoder.encode("Field1", "UTF-8") 
                + "=" + URLEncoder.encode(field1, "UTF-8");
        data += "&" + URLEncoder.encode("Field2", "UTF-8") + "="
                   + URLEncoder.encode(field2, "UTF-8"); 
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

       String text = "";
       BufferedReader reader=null;

       // Send data 
          try
          { 

              // Defined URL  where to send data
              URL url = new URL(Constants.URL_EMAIL_LOGIN);

           // Send POST data request

            HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
            wr.write(data); 
            wr.flush(); 
            int number = conn.getResponseCode();

            // Get the server response

          reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
          StringBuilder sb = new StringBuilder();
          String line = null;

          // Read Server Response
          while((line = reader.readLine()) != null)
              {
                     // Append server response in string
                     sb.append(line + "\n");
              }


              text = sb.toString();
          }
          catch(Exception ex)
          {

          }
          finally
          {
              try
              {

                  reader.close();
              }

              catch(Exception ex) {}
          }
如果ResponseCode为200(全部正常),服务器将向我发送一个包含所需数据的字符串。没问题,我发布的代码处理它没有问题。200答复:

"{\r\n  \"user\": \"AAAA\",\r\n  \"token\": \" \",\r\n  \"email\": \"test@test.com\" \r\n}"
但我也需要抓住错误。在这种情况下,服务器返回一个
JSON
。这是一个错误的响应(我是通过Firefox的Poster扩展得到的):

有了这样的回应,我的应用程序崩溃了:

reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
这是捕获到的错误:

java.io.FileNotFoundException: [url]

有人知道如何从服务器读取
JSON
吗?

错误是由
conn.getInputStream()
方法引起的<如果服务器返回的响应代码大于或等于
400

当响应状态不是
200

选中此项:

BufferedInputStream inputStream = null;

int status = conn.getResponseCode();

if (status != HttpURLConnection.HTTP_OK) {
    inputStream = conn.getErrorStream();
} else {
    inputStream = conn.getInputStream();
}
并在您的
阅读器中使用它作为:

reader = new BufferedReader(new InputStreamReader(inputStream));

@O.D.我很高兴它很有用!
reader = new BufferedReader(new InputStreamReader(inputStream));