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

我正在尝试使用 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 内部服务器错误连接:keep-alive 日期:2018 年 11 月 10 日星期六 19:56:18 GMT 服务器:Apache 传输编码:分块内容类型:应用程序/json 通过:1.1 vegur


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


慕后森
浏览 226回答 2
2回答

慕哥9229398

以5开头的 HTTP 状态代码通知错误在服务器端。代码500被解释为Internal Server Error,要解决这个问题,您必须检查可能导致它的原因。这可能是由代码中的错误引起的,在这种情况下,您可以打开 error_log 以查看错误并采取相应措施。这可能是由于服务器功能暂时不可用(例如访问数据库)或同时打开的连接数超过相关 mysql 资源造成的。有时,错误不会记录到 error_log 文件中。如果您使用 cpanel,请在主页上的Metrics选项卡下打开Errors并根据您向服务器请求的时间进行检查。如果您没有使用,请cpanel查找相应的服务器日志。通过在您的问题中传递的链接,错误代码不应该是,除非它在您的服务器端脚本中被覆盖或硬编码。看这三个测试:有了这个,我设置了时间和癌症参数,如您所见,错误代码是 500,但在响应正文中,状态 200 一切正常。有了这个,即使我只设置一个参数,我仍然有答案。在响应正文中,有一个错误不是服务器错误,而是自定义错误:缺少参数。猜猜返回的 HTTP 代码是什么(500)如果我删除所有参数怎么办?一切正常。HTTP 状态代码和响应正文。这告诉我作者是否希望您收听自定义请求status而不是返回的 HTTP 状态代码。这只是我的观点。

胡子哥哥

我发现您正在使用的 API 上的一个错误是发送响应代码 500 + 响应数据。并且在 volley 中,只要检测到 200 到 299 以外的响应代码,就会在 volley 那里运行错误侦听器来处理它。这就是为什么您的代码错过了您的响应数据的原因,因为 Volley 错误侦听器首先获得了呼叫。带有两个点的邮递员图片标记坦率地说,这是 API 设计的非标准糟糕方式,它也会在响应上抛出状态代码。我也想告诉你一些事情:开始使用 Postman(如果你不使用它)Jamun Volley 图书馆开始使用帮助程序库,这是我建议您使用的,它可以处理您的大多数方法调用,并通过自定义消息和单独的状态代码为您提供更好的错误处理。希望这将帮助您应对未来的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java