无法在Android的Volley的错误侦听器中从服务器检索错误消息 [英] Cannot retrieve error message from server in Error Listener of Volley in Android

查看:39
本文介绍了无法在Android的Volley的错误侦听器中从服务器检索错误消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆