为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2022-01-12 14:08:32
我正在尝试使用 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 还是我?
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

5开头的 HTTP 状态代码通知错误在服务器端。代码500被解释为Internal Server Error,要解决这个问题,您必须检查可能导致它的原因。这可能是由代码中的错误引起的,在这种情况下,您可以打开 error_log 以查看错误并采取相应措施。

这可能是由于服务器功能暂时不可用(例如访问数据库)或同时打开的连接数超过相关 mysql 资源造成的。

有时,错误不会记录到 error_log 文件中。如果您使用 cpanel,请在主页上的Metrics选项卡下打开Errors并根据您向服务器请求的时间进行检查。如果您没有使用,请cpanel查找相应的服务器日志。

通过在您的问题中传递的链接,错误代码不应该是,除非它在您的服务器端脚本中被覆盖或硬编码。

看这三个测试:


//img1.sycdn.imooc.com//61de707900013c4013570480.jpg

有了这个,我设置了时间和癌症参数,如您所见,错误代码是 500,但在响应正文中,状态 200 一切正常。

//img1.sycdn.imooc.com//61de708700013e1813620406.jpg

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

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

//img1.sycdn.imooc.com//61de70940001c31313580389.jpg

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


查看完整回答
反对 回复 2022-01-12
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

我发现您正在使用的 API 上的一个错误是发送响应代码 500 + 响应数据。并且在 volley 中,只要检测到 200 到 299 以外的响应代码,就会在 volley 那里运行错误侦听器来处理它。这就是为什么您的代码错过了您的响应数据的原因,因为 Volley 错误侦听器首先获得了呼叫。

带有两个点的邮递员图片标记

//img1.sycdn.imooc.com//61de70ad00012d3b15200639.jpg

坦率地说,这是 API 设计的非标准糟糕方式,它也会在响应上抛出状态代码。

我也想告诉你一些事情:

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

  2. Jamun Volley 图书馆

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

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


查看完整回答
反对 回复 2022-01-12
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号