如何处理 Android 中的意外响应 500
How to deal with unexpected response 500 in Android
我正在尝试使用 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: Unexpected response code 500
and when I ran a test on the API in https://apitester.com/ It tells me its passed and I get this error
回应Headers
HTTP/1.1 500 内部服务器错误
连接:keep-alive
日期:2018 年 11 月 10 日星期六 19:56:18 GMT
服务器:阿帕奇
Transfer-Encoding:分块
Content-Type: application/json
通过:1.1 素食主义者
有什么解决办法吗?是API还是我?
以 5 开头的 HTTP 状态代码通知错误发生在服务器端。代码 500 被解释为 Internal Server Error,要解决此问题,您必须检查可能导致它的原因。这可能是由代码错误引起的,在这种情况下,您可以打开 error_log 查看错误并采取相应措施。
这可能是由于服务器功能暂时不可用造成的,例如访问数据库或同时打开的连接超过关联的 mysql 资源。
其他时候,错误没有记录到 error_log 文件中。如果您使用 cpanel,请在主页的 Metrics 选项卡下打开 Errors 并根据您向服务器请求的时间进行检查。如果您没有使用 cpanel
查找相应的服务器日志。
随着 link 在您的问题中传递,错误代码不应出现,除非它在您的服务器端脚本中被覆盖或硬编码。
查看这三个测试:
有了这个,我设置了时间和癌症参数,正如你所看到的,错误代码是 500,但在响应主体中,状态 200 一切正常。
有了这个,即使我只设置一个参数,我也有答案。在响应正文中,有一个错误不是服务器错误而是自定义错误:缺少参数。猜猜返回的HTTP代码是什么(500)
如果我删除所有参数会怎样?
一切都很好。 HTTP 状态代码和响应正文。
这告诉我作者是否希望您收听自定义请求 status
而不是返回的 HTTP 状态代码。这只是我的观点。
我在 API 上发现了一个错误,您正在使用它发送响应代码 500 + 响应数据。
在截击中,只要检测到 200 到 299 以外的响应代码,截击 运行 就会有错误侦听器来处理它。这就是为什么您的代码错过了您的响应数据,因为 Volley 错误侦听器首先调用。
Postman Picture mark with both Points
坦率地说,这是 API 设计的非标准糟糕方式,它也会在响应中抛出状态代码。
想告诉你的事情太多了:
开始使用 Postman(如果您没有使用它)
开始使用帮助程序库,这是我建议您使用的,它可以处理您的大多数方法调用,并通过自定义消息和单独的状态代码为您提供更好的错误处理。
希望这能帮助您应对未来的方法。
我正在尝试使用 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: Unexpected response code 500 and when I ran a test on the API in https://apitester.com/ It tells me its passed and I get this error
回应Headers HTTP/1.1 500 内部服务器错误 连接:keep-alive 日期:2018 年 11 月 10 日星期六 19:56:18 GMT 服务器:阿帕奇 Transfer-Encoding:分块 Content-Type: application/json 通过:1.1 素食主义者
有什么解决办法吗?是API还是我?
以 5 开头的 HTTP 状态代码通知错误发生在服务器端。代码 500 被解释为 Internal Server Error,要解决此问题,您必须检查可能导致它的原因。这可能是由代码错误引起的,在这种情况下,您可以打开 error_log 查看错误并采取相应措施。
这可能是由于服务器功能暂时不可用造成的,例如访问数据库或同时打开的连接超过关联的 mysql 资源。
其他时候,错误没有记录到 error_log 文件中。如果您使用 cpanel,请在主页的 Metrics 选项卡下打开 Errors 并根据您向服务器请求的时间进行检查。如果您没有使用 cpanel
查找相应的服务器日志。
随着 link 在您的问题中传递,错误代码不应出现,除非它在您的服务器端脚本中被覆盖或硬编码。
查看这三个测试:
有了这个,我设置了时间和癌症参数,正如你所看到的,错误代码是 500,但在响应主体中,状态 200 一切正常。
有了这个,即使我只设置一个参数,我也有答案。在响应正文中,有一个错误不是服务器错误而是自定义错误:缺少参数。猜猜返回的HTTP代码是什么(500)
如果我删除所有参数会怎样?
一切都很好。 HTTP 状态代码和响应正文。
这告诉我作者是否希望您收听自定义请求 status
而不是返回的 HTTP 状态代码。这只是我的观点。
我在 API 上发现了一个错误,您正在使用它发送响应代码 500 + 响应数据。 在截击中,只要检测到 200 到 299 以外的响应代码,截击 运行 就会有错误侦听器来处理它。这就是为什么您的代码错过了您的响应数据,因为 Volley 错误侦听器首先调用。
Postman Picture mark with both Points
坦率地说,这是 API 设计的非标准糟糕方式,它也会在响应中抛出状态代码。
想告诉你的事情太多了:
开始使用 Postman(如果您没有使用它)
开始使用帮助程序库,这是我建议您使用的,它可以处理您的大多数方法调用,并通过自定义消息和单独的状态代码为您提供更好的错误处理。
希望这能帮助您应对未来的方法。