Send authentication information with Volley request

前端 未结 3 964
执念已碎
执念已碎 2020-12-10 05:24

In my Android app I have to call a web service which looks like this

http://mywesite.com/demo/mob/getmenubycategory/1

I am using the volle

相关标签:
3条回答
  • 2020-12-10 05:49

    Use CustomVolleyRequest as I use below

    public class CustomVollyRequest extends Request<JSONObject> {
        private Listener<JSONObject> listener;
        private Map<String, String> params;
    
        public CustomVollyRequest(String url, Map<String, String> params, 
                Listener<JSONObject> reponseListener, 
                ErrorListener errorListener) {
            super(Method.GET, url, errorListener);
            this.listener = reponseListener;
            this.params = params;
        }
    
        public CustomVollyRequest(int method, String url, Map<String, String> params, 
                Listener<JSONObject> reponseListener, 
                ErrorListener errorListener) {
            super(method, url, errorListener);
            this.listener = reponseListener;
            this.params = params;
        }
    
        @Override
        protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
            return params;
        }
    
        @Override
        protected void deliverResponse(JSONObject response) {
            listener.onResponse(response);
        }
    
        @Override
        protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
            try {
                String jsonString = new String(response.data,     HttpHeaderParser.parseCharset(response.headers));
                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));
        }
    }
    

    Use the above class as below

    Map<String, String> params = new HashMap<>();
    params.put("key",value);//put your parameters here
    CustomVollyRequest jsObjRequest = new CustomVollyRequest(
            Request.Method.POST, url, params,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    //Log.d("Response: ", response.toString());
                }
            }, 
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError response)
                {
                    Log.d("Response: Error", response.toString());
                }
            }
    );
    
    0 讨论(0)
  • 2020-12-10 05:50

    For authentication, IMHO, you should override getHeaders instead of getParams, please try the following:

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
           Map<String, String> headers = new HashMap<>();                
           String credentials = "username:password";
           String auth = "Basic "
                            + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
           headers.put("Content-Type", "application/json");
           headers.put("Authorization", auth);
           return headers;
    }
    

    Hope it helps!

    0 讨论(0)
  • 2020-12-10 05:57

    just override this method

     @Override
            public Map<String, String> getHeaders() {
                String username ="danish@gmail.com";
                String password = "dani3173";
                String auth =new String(username + ":" + password);
                byte[] data = auth.getBytes();
                String base64 = Base64.encodeToString(data, Base64.NO_WRAP);
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Authorization",base64);
                headers.put("accept-language","EN");
                headers.put("Content-type","application/json");
                headers.put("Accept","application/json");
                return headers;
            }
    
    0 讨论(0)
提交回复
热议问题