2016-06-30 20 views
0

Ich versuche, eine Anmeldung zu erstellen, die einen Benutzernamen nimmt und diese Informationen zusammen mit dem authentifizierten Header an den Server pinn und posten und ein JSON-Objekt abruft. Die getHeaders() gibt die richtigen Daten zurück und die öffentliche byte[] getBody() gibt auch die richtigen Informationen zurück. Allerdings bekomme ich immer noch einen 415 Fehler. Gibt es etwas in diesem Code, den ich nicht sehe?Android Volley JSON Beitrag Login

import android.util.Base64; 

import com.android.volley.AuthFailureError; 
import com.android.volley.Response; 
import com.android.volley.toolbox.StringRequest; 

import java.util.HashMap; 
import java.util.Map; 

public class LoginRequest extends StringRequest { 

    private static final String LOGIN_REQUEST_URL = "https://foobar.com"; 
    private Map<String, String> params; 

    public LoginRequest(String username, String password, Response.Listener<String> listener) { 
     super(Method.POST, LOGIN_REQUEST_URL, listener, null); 
     params = new HashMap<>(); 
     params.put("username", username); 
     params.put("userpin", password); 
    } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String, String> headers = new HashMap<>(); 

     // Temporary Auth 
     String username = "[email protected]"; 
     String password = "password"; 
     String credentials = username + ":" + password; 
     String base64EncodedCredentials = 
       Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); 
     headers.put("Content-Type", "application/json"); 
     headers.put("Authorization", "Basic " + base64EncodedCredentials); 

     return headers; 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError { 
     //RAW PAYLOAD 
     // {"username":"[email protected]","userpin":"1234"} 
     String str = "{\"username\":\"" + params.get("username") + "\",\"userpin\":\"" + params.get("userpin") + "\"}"; 

     return str.getBytes(); 
    } 

    @Override 
    public String getBodyContentType() { 
     return "application/json"; 
    } 

} 
+0

Um zu verdeutlichen, unterscheiden sich der Benutzername und das Passwort für die Authentifizierung in getHeaders() von dem Login-Benutzernamen und dem Passwort, die vom Benutzer unter username und userpin eingegeben werden. – user2535063

+0

Versuchen Sie, indem Sie 'application/json' in' application/json; charset = utf-8' ändern. Wenn es nicht funktioniert, entferne diese Zeile 'headers.put (" Content-Type "," application/json ");' –

+0

Vielen Dank. Headers.put entfernen ("Content-Type", "application/json"); Problem gelöst. Sehr geschätzt. – user2535063

Antwort

-1

Versuchen zu aktualisieren, indem Sie:

application/json 

in:

application/json;charset=utf-8 

Wenn es nicht funktioniert, dann Entferne diese Zeile:

0

versuchen, Ihre Funktion 'getBody()' zu

@Override 
    public byte[] getBody() throws AuthFailureError { 
     try 
     { 
      JSONObject aux = new JSONObject(params); 
      return aux.toString().getBytes("utf-8"); 
     } catch (UnsupportedEncodingException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    }