如何处理Android中的意外响应500

时间:2018-11-10 20:01:27

标签: java android android-studio android-volley status

我正在尝试使用Volley从外部API检索JSON。 这是我的代码

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    final TextView mTextView = findViewById(R.id.testreq);
    RequestQueue queue = Volley.newRequestQueue(this);
    String url = "https://horoscope-free-api.herokuapp.com/?time=today&sign=cancer";
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // Display the first 500 characters of the response string.
                    mTextView.setText("Response is: "+ response.substring(0,500));
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            mTextView.setText("That didn't work");
            Log.d("Error", error.toString());
        }
    });
    queue.add(stringRequest);
}

似乎响应已完成,但出现此错误

  

E / Volley:[277] BasicNetwork.performRequest:意外的响应代码500   当我在https://apitester.com/上对API进行测试时,它告诉我它已通过,并且出现此错误

响应标题 HTTP / 1.1 500内部服务器错误 连接:保持活动状态 日期:2018年11月10日,星期六19:56:18 GMT 服务器:Apache 传输编码:分块 内容类型:application / json 通过:1.1 vegur

任何想法如何解决这个问题?是API还是我?

2 个答案:

答案 0 :(得分:0)

5 开头的

HTTP状态代码表明错误在服务器端。代码 500 被解释为内部服务器错误,要解决此问题,您必须检查可能导致它的原因。在这种情况下,可能是由于代码错误引起的,您可以打开error_log查看错误并采取相应措施。

这可能是由于服务器功能暂时不可用(例如访问数据库)或同时打开的多个连接超出关联的mysql资源而导致的。

有时,该错误未记录到error_log文件中。如果您使用面板,请在首页的指标标签下打开错误,然后根据向服务器请求的时间进行检查。如果您没有使用cpanel,请查找相应的服务器日志。

通过您的问题中传递的链接,除非您的服务器端脚本中覆盖了错误代码或将其硬编码,否则不应出现错误代码。

请参阅以下三个测试:

enter image description here

这样,我既设置了时间参数,又设置了癌症参数,如您所见,错误代码为500,但在响应体内,状态为200时一切正常。

enter image description here

有了这个,即使我只设置了一个参数,我仍然有答案。在响应正文中,有一个错误不是服务器错误,而是自定义错误:缺少参数。猜猜返回的HTTP代码是什么(500)

如果删除所有参数该怎么办?

enter image description here

一切正常。 HTTP状态代码和响应正文。 这告诉我,作者是否希望您听定制的请求status,而不是返回的HTTP状态代码。那只是我的观点。

答案 1 :(得分:0)

我发现您正在使用的API上的错误正在发送响应代码500 +响应数据。 在齐射中,每当检测到响应码不是200到299时,就在齐射中运行Error Listeners进行处理。这就是为什么代码因为Volley Error Listener获得Call First而错过了Response数据的原因。

Postman Picture mark with both Points

坦率地说,这是API设计的非标准不良方法,它也会在Responses上抛出状态代码。

我也想告诉你的事

  1. 开始使用Postman(如果您不使用它)

  2. Jamun Volley Library

这是我建议您开始使用的帮助程序库,它可以处理大多数方法调用,并通过自定义消息和单个状态代码为您提供更好的错误处理。

希望这将帮助您应对未来的方法。