2016-08-09 51 views
1

Derzeit wenn ich versuche, eine GET-Anfrage zu machen, ich habe zuerst zu authentifizieren. Wenn ich also auf das Internet schaue, muss ich die getHeaders() verwenden und eine Hashmap verwenden, um meine Anmeldeinformationen zu übermitteln. Mein Header enthält jedoch ein paar zusätzliche Informationen, die ich senden muss.Volley Authentication Header

Mein Header sieht wie folgt aus: enter image description here

Ich bin nicht sicher, was das Problem sein könnte. Ich habe das Gefühl, dass ich die richtigen Informationen sende.

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlJsonObj, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 

       try { 
        // JSONObject jsonArray = response.getJSONObject("response_message"); 

        String message = response.getString("response_message"); 

        Toast.makeText(getActivity(), 
            message, 
            Toast.LENGTH_LONG).show(); 


       } catch (JSONException e1) { 
        e1.printStackTrace(); 
       } 
      } 

      } 


     , 

       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Log.e("Volley", "Error"); 
        } 
       } 


     ) { 
      @Override 
      public Map getHeaders() throws AuthFailureError { 
       Map headers = new HashMap<>(); 
       String credentials = "ezhu:[email protected]"; 
       String auth = "Basic " 
         + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); 
       headers.put("Content-Type", "application/json"); 
       headers.put("Authorization", auth); 
       headers.put("user-tz", "-330"); 


       return headers; 
      } 
     }; 



     requestQue.add(jsonObjectRequest); 

    } 

Ich bekomme einen 401 Fehler in meinem Protokoll und es gibt mir die URL. Wenn ich die URL ein Tab in meinem Browser klicken öffnet und zeigt folgende:

{ "error_message": "Fehlende Anforderungsmethodenparameter", "error_code": "1", "Fehler": "Missing-Request-Header 'user-tz' für Methodenparameter vom Typ String "}

+0

Die Art und Weisen Sie in einem Browser eine REST-URL zu test möglicherweise nicht korrekt sein (Ihr Browser keine des eindeutigen Kopfes wie „vom Benutzer senden tz: -330 "), wenn Sie nur versuchen, in einem Browser zur API-URL zu gelangen. Sie könnten es also nicht korrekt "debuggen". Trotzdem sieht Ihr Android-Code zwar korrekt aus, sofern die Header der Anfragesätze gesetzt werden. In der Vergangenheit habe ich 'Map headers = new ArrayMap <>()' verwendet, obwohl ich nicht denke, dass das einen Unterschied machen sollte. Ich würde sagen, überprüfen Sie die API-Dokumentation für den Dienst, den Sie verwenden möchten. – Brian

+0

@Addat irgendwelche Lösungen für dieses Problem? –

Antwort

1

Ihr Code scheint korrekt zu sein. Sie können versuchen, etwas in Ihren Protokollen zu finden. Als ich ähnliches Problem behandelte, fand ich

W/System: Header sessionID ignorieren, weil sein Wert null war.

in meinem Logs, was war ziemlich hilfreich