如何使用JSON时处理500内部服务器错误

时间:2015-02-28 20:18:07

标签: android json

我对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;
}

5 个答案:

答案 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)

我遇到了和你一样的问题,我解决了这个问题因为我在添加GSON .jar文件时添加了我的服务器端项目而错过了一部分。我认为你应该像我一样将外部库添加到你的项目中。通过这些链接我可以发现问题。

LINK 1

LINK 2