Volley的自定义基本身份验证?

时间:2014-12-13 22:23:48

标签: android android-volley

我正在尝试使用Volley创建自定义BasicAuthentication。我有一个类ApplicationController,我实现了getHeaders方法,并且适用于所有应用程序,但是现在,我有一个方法需要将其他BasicAuthentication与其他参数一起发送。要做到这一点,我正在尝试@Override类ApplicationController的getHeaders()。它不起作用并返回异常。

我该怎么做?

异常

 12-13 20:11:26.300    32356-430/br.com.application.apppackage E/Volley﹕ [157735] BasicNetwork.performRequest: Unexpected response code 400 for http://www.aplication.com.br/ServiceEndpointRest/WsChat/ws/salas/interact.json
    12-13 20:11:26.305  32356-32356/br.com.application.apppackage E/ERROR METHOD:﹕ receiveMessage in ChatDAO: null

我正在尝试这个。

的ApplicationController

public class ApplicationController extends Request<JSONObject>{
        private Map<String, String> headers;    
        private Map<String, String> params;
        private Response.Listener<JSONObject> listener;
        private MultipartEntityBuilder mBuilder = MultipartEntityBuilder.create();
        private File mImageFile;
        private Map<String, Object> imageParams;


        public ApplicationController(String url, Map<String, String> params, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
            super(Method.GET, url, errorListener);
            this.listener = listener;
            this.params = params;
        }

        public ApplicationController(int method, String url, Map<String, String> params, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
            super(method, url, errorListener);
            this.listener = listener;           
            this.params = params;
        }


        protected Map<String, String> getParams() throws AuthFailureError {
            return params;
        };


        public Map<String, String> getHeaders() throws AuthFailureError {
            headers = new HashMap<String, String>();
            String cred = String.format("%s:%s", BasicAuthenticationRest.USERNAME, BasicAuthenticationRest.PASSWORD);
            String auth = "Basic " + Base64.encodeToString(cred.getBytes(), Base64.DEFAULT);
            headers.put("Authorization", auth);

            return headers;
        };


        @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));
            }
        }


        @Override
        protected void deliverResponse(JSONObject response) {
            listener.onResponse(response);
        }

}

方法receiveMessage中的@Override标头

public ApplicationController receiveMessage(String emailAdversario){
        ///{\"Sala\":{\"usuario\":\"%@\",\"adversario\":\"%@\",\"atualizacao\":\"%@\",\"device\":\"%@\",\"device_tipo\":\"ios\"}}
        urlPost.append("WsChat/ws/salas/interacao.json");
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("usuario", BatalhaConfigs.USUARIO_EMAIL);            
        params.put("atualizacao", new Date().toString());
        params.put("email", BatalhaConfigs.USUARIO_EMAIL);
        params.put("device", AndroidReturnId.getAndroidId());
        params.put("device_tipo", "android");

        ApplicationController apc = new ApplicationController(Request.Method.POST,
                                                              urlPost.toString(),
                                params,
                                new Response.Listener<JSONObject>() {
                                    @Override
                                    public void onResponse(JSONObject obj) {
                                        Log.i("RESPOSTA DA MENSAGEM: ", obj.toString());

                                    }
                                },
                                new Response.ErrorListener() {
                                    @Override
                                    public void onErrorResponse(VolleyError arg0) {
                                        Log.e("ERROR METHOD:", "receiveMessage in ChatDAO: " + arg0.getLocalizedMessage());
                                    }
                                })
            {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<String, String>();
                    String cred = String.format("%s:%s", BatalhaConfigs.USUARIO_EMAIL, BatalhaConfigs.USUARIO_SENHA);
                    String auth = "Basic " + Base64.encodeToString(cred.getBytes(), Base64.DEFAULT);
                    headers.put("Authorization", auth);

                    return headers;
            }};
        return apc;
    }

0 个答案:

没有答案