无法在Android的Volley的错误侦听器中从服务器检索错误消息 [英] Cannot retrieve error message from server in Error Listener of Volley in Android
问题描述
我正在开发一个Android应用程序.在我的应用程序中,我正在使用凌空API通过API将数据发布到服务器.但是我从服务器检索错误消息并进行解析时遇到了问题.
I am developing an Android app. In my app, I am posting data to server via API using volley. But I am having a problem with retrieving error message from server and parsing it.
我从服务器返回的Http状态代码为json数据,如下所示:
From server I am returning json data with Http status code 400 like this:
{
"name":["name is required"],
"email":["email is required"]
}
因此,当我向其发出齐射请求时,状态代码为400时出现错误,如下面的屏幕截图所示.
So when I make volley request to it, I am getting error with status code 400 as you can see in screenshot below.
我想要的是,我想从服务器解析该错误消息并显示给用户.我点击了此链接- Android:如何处理来自服务器使用Volley?
What I want is, I want to parse that error message from server and show to user. I followed this link- Android: How handle message error from the server using Volley?
这就是我使用排球发出请求并检索错误消息的方式
This is how I am making request and retrieving error message using volley
String url = LinkConfig.Register;
JSONObject param = new JSONObject();
param.put("name",tfName.getText().toString().trim());
param.put("email",tfEmail.getText().toString().trim());
param.put("password",tfPassword.getText().toString().trim());
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, param, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if(response!=null)
{
try{
String accessToken = response.getString("access_token");
User user = new User();
user.setId(response.getString("id"));
user.setName(response.getString("name"));
user.setEmail(response.getString("email"));
user.setAvatarUrl(response.isNull("avatar_url") ? null : response.getString("avatar_url"));
config.StoreUserCredentials(user, accessToken);
setResult(MainActivity.REGISTER_REQUEST_CODE);
finish();
}
catch (JSONException e)
{
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
NetworkResponse response = error.networkResponse;
String json = "";
if(response != null && response.data != null){
switch(response.statusCode){
case 400:
json = new String(response.data);
Toast.makeText(getBaseContext(),json,Toast.LENGTH_SHORT).show();
break;
}
//Additional cases
}
}
}){
@Override
protected VolleyError parseNetworkError(VolleyError volleyError) {
if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
VolleyError error = new VolleyError(new String(volleyError.networkResponse.data));
volleyError = error;
}
return volleyError;
}
};
RequestSingleton.getInstance(getBaseContext()).addToRequestQueue(request);
但是在上面的代码中,error.networkResponse
在onErrorResponse侦听器中始终为null.为什么我的代码不起作用?服务器正在返回正确的数据和状态代码.如何检索错误消息并进行解析?
But in above code, error.networkResponse
is always null in onErrorResponse listener. Why is my code not working? Server is returning proper data and status code. How can I retrieve error message and parse it?
推荐答案
可以通过覆盖parseNetworkError
来解析错误消息(如果可用),如下所示:
You can parse the error message if available by overriding parseNetworkError
as the following:
@Override
protected VolleyError parseNetworkError(VolleyError volleyError) {
String json;
if (volleyError.networkResponse != null && volleyError.networkResponse.data != null) {
try {
json = new String(volleyError.networkResponse.data,
HttpHeaderParser.parseCharset(volleyError.networkResponse.headers));
} catch (UnsupportedEncodingException e) {
return new VolleyError(e.getMessage());
}
return new VolleyError(json);
}
return volleyError;
}
这篇关于无法在Android的Volley的错误侦听器中从服务器检索错误消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!