Android-从POST请求读取JSON
我需要在Android中捕获来自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") + "=
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));