我对Android比较陌生,我使用JSON从服务器获取数据。在第22行的第一个循环中,StringBuilder包含500内部服务器错误,然后jArray最终返回null。我该如何处理这个错误?
public static JSONObject getJSON() {
String jsonString = "";
InputStream inStream = null;
//http post
JSONObject jArray = null;
try {
HttpClient httpClient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httpPost = new HttpPost(WS_URL);
httpPost.setHeader("Content-type", "application/json");
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
inStream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
inStream.close();
jsonString = sb.toString();
jArray = new JSONObject(jsonString);
//outputTransactions(jArray);
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return jArray;
}
答案 0 :(得分:2)
虽然这是一个迟到的回复,但它可能会帮助其他人。在将其解析为JSON之前,您需要检查服务器的响应状态。
对于前。
int status_code=response.getStatusLine().getStatusCode();
if(status_code!=200){
Log.d("MYLOG","ERROR! Response status is"+status_code);
}
else{
inStream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
inStream.close();
// Rest of your code......
}
或者您可以选择检查状态代码并向用户显示错误
像:
else if(status_code==404){
Log.d("MYLOG","Sorry! Page not found! Check the URL ");
}else if(status_code==500){
Log.d("MYLOG","Server is not responding! Sorry try again later..");
}
希望对像你这样的新手有所帮助: - )
答案 1 :(得分:1)
看一下这个答案:https://stackoverflow.com/a/8148785/1974614
您应该检查statusCode
对500
答案 2 :(得分:0)
“500 Internal Server”错误表示服务器在响应您的请求时出现问题。您没有收到JSON字符串响应。
然后当你尝试创建jArray时,字符串是无效的JSON而JSONObject
无法解析它 - 它会像你说的那样返回“null”。
您可以解析服务器响应以查看它是否包含此字符串,然后创建所需的任何jArray对象,但是您无法从非JSON字符串中获取JSON对象。
答案 3 :(得分:0)
您应该考虑使用库来处理REST请求,例如:http://square.github.io/retrofit/
如果您使用类似的库,则可以在成功响应可用时从json获取对象,而在发生错误时可以从其他对象获取对象。
MyApi mylogin = restAdapter.create(MyApi.class); //this is how retrofit create your api
mylogin.login(username,password,new Callback<String>() {
@Override
public void success(String s, Response response) {
//process your response if login successfull you can call Intent and launch your main activity
}
@Override
public void failure(RetrofitError retrofitError) {
retrofitError.printStackTrace(); //to see if you have errors
}
});
}
答案 4 :(得分:0)