5

ile kimlik doğrulama bilgilerini gönder ben isteği göndermek için voleybolu kullanıyorum ama sonuç VolleyError 401 buBenim android uygulamasında voleybolu isteği

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

gibi görünen bir web hizmeti çağırmak zorunda. Başlığı eklemek için getParams() yöntemini geçersiz kıldım. ama bu çalışmıyor. İşte kodum.

RequestQueue requestQueue = volleySingleton.getRequestQueue(); 
    requestQueue.add(new JsonObjectRequest(Request.Method.GET, url, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      Log.e(TAG, "onResponse = \n " + response.toString()); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "response error \n" + error.networkResponse.statusCode); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      try { 
       Map<String, String> map = new HashMap<String, String>(); 
       String key = "Authorization"; 
       String encodedString = Base64.encodeToString(String.format("%s:%s", "USERNAME", "Password").getBytes(), Base64.NO_WRAP); 
       String value = String.format("Basic %s", encodedString); 
       map.put(key, value); 
       return map; 
      } catch (Exception e) { 
       Log.e(TAG, "Authentication Filure"); 
      } 
      return super.getParams(); 
     } 
    }); 

Tarayıcımı kullandığımda, kullanıcı adımı ve parolamı girmek için bir iletişim kutusu görüntülenir. Volley kullanarak istek üzerine kullanıcı adı ve şifre nasıl gönderilir. Bunu çözmek için herhangi bir yardım takdir edilecektir. Ben kimlik doğrulaması için

Map<String, String> params = new HashMap<>(); 
params.put("key",value);//put your parameters here 
Custom_Volly_Request jsObjRequest = new Custom_Volly_Request(
     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

Herhangi bir hata günlüğünüz var mı? – Sree

+0

Hayır, 401'i "onErrorResponse (VolleyError error)" – Sony

+0

'da günlüğe kaydederek bu 'hatayı' yazdırmaya çalışıyor musunuz? – Sree

cevap

19

aşağıda

public class Custom_Volly_Request extends Request<JSONObject> { 
    private Listener<JSONObject> listener; 
    private Map<String, String> params; 

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

    public Custom_Volly_Request(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)); 
    } 
} 

Kullanım yukarıdaki sınıf altında kullandıkça, IMHO, yerine getParams ait getHeaders geçersiz kılar

+2

Teşekkürler! 'GetParams()' yerine 'getHeaders()' işlevini kullanmak benim problemimi çözdü. – Sdghasemi

+0

Bu, kendi İstek uzantınızı oluşturmanın anlamı nedir? Kullanıcı adı: şifre verisini nasıl geçersiniz ve jetonlar nereye gider? –

+0

@G_V, temel kimlik doğrulama ile ilgili ve örnek kodumda gördüğünüz gibi 'String credentials =" kullanıcı adı: şifre ";', tokenler hakkında, web servisine gönderilen erişim belirtecini mi kastediyorsunuz? Evet ise, aynı zamanda getHeaders(); ' – BNK

0

için Özel Volley isteği, lütfen aşağıdakileri deneyin:

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

Umut eder!

İlgili konular