【发布时间】:2016-10-03 19:25:31
【问题描述】:
我正在开发一个 Android 应用程序。在我的应用程序中,我使用 volley 通过 API 将数据发布到服务器。但我在从服务器检索错误消息并对其进行解析时遇到问题。
我正在从服务器返回带有 Http 状态代码 400 的 json 数据,如下所示:
{
"name":["name is required"],
"email":["email is required"]
}
所以当我向它发出凌空请求时,我收到了状态码 400 的错误,如下面的屏幕截图所示。
我想要的是,我想解析来自服务器的错误消息并显示给用户。我点击了这个链接-Android: How handle message error from the server using Volley?
这就是我使用 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。为什么我的代码不起作用?服务器正在返回正确的数据和状态代码。如何检索错误消息并对其进行解析?
【问题讨论】:
-
您是否在其他客户端(如 Postman)中尝试了相同的请求,以确认 API 以您期望的方式工作?
-
是的,我在 Postman 上试过。正如我所提到的,我收到了错误消息。