How to create a proper Volley Listener for cross class Volley method calling

后端 未结 3 1940
别那么骄傲
别那么骄傲 2020-12-03 18:31

I aim to call Volley from another class in, a very succinct, modular way ie:

            VolleyListener newListener = new VolleyListener();
            Volle         


        
3条回答
  •  春和景丽
    2020-12-03 19:00

    For your requirement, I suggest you refer to my following solution, hope it's clear and helpful:

    First is the interface:

    public interface VolleyResponseListener {
        void onError(String message);
    
        void onResponse(Object response);
    }
    

    Then inside your helper class (I name it VolleyUtils class):

    public static void makeJsonObjectRequest(Context context, String url, final VolleyResponseListener listener) {
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
                    (url, null, new Response.Listener() {
    
                    @Override
                    public void onResponse(JSONObject response) {
                        listener.onResponse(response);
                    }
                }, new Response.ErrorListener() {
    
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        listener.onError(error.toString());
                    }
                }) {
    
            @Override
            protected Response parseNetworkResponse(NetworkResponse response) {
                try {
                    String jsonString = new String(response.data,
                            HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
                    return Response.success(new JSONObject(jsonString),
                            HttpHeaderParser.parseCacheHeaders(response));
                } catch (UnsupportedEncodingException e) {
                    return Response.error(new ParseError(e));
                } catch (JSONException je) {
                    return Response.error(new ParseError(je));
                }
            }
        };
    
        // Access the RequestQueue through singleton class.
        VolleySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);
    }
    

    Then, inside your Activity classes, you can call like the following:

    VolleyUtils.makeJsonObjectRequest(mContext, url, new VolleyResponseListener() {
            @Override
            public void onError(String message) {
    
            }
    
            @Override
            public void onResponse(Object response) {
    
            }
        });
    

    You can refer to the following questions for more information (as I told you yesterday):

    Android: How to return async JSONObject from method using Volley?

    POST Request Json file passing String and wait for the response Volley

    Android/Java: how to delay return in a method

提交回复
热议问题