2017-10-14 32 views
0

Ci-dessous est la classe que j'utilise pour envoyer un POST demande lors de l'utilisation OkHttp:Code d'erreur 400 lors de la mise en œuvre demande POST en Volley, mais pas lors de la mise en œuvre avec OkHttp

public class PostExample { 
private static final MediaType JSON 
     = MediaType.parse("application/json;"); 

private OkHttpClient client = new OkHttpClient(); 

String post(String url, String json) throws IOException { 
    RequestBody body = RequestBody.create(JSON, json); 
    Request request = new Request.Builder() 
      .url(url) 
      .post(body) 
      .build(); 
    try (Response response = client.newCall(request).execute()) { 
     return response.body().string(); 
    } 
} 

String bowlingJson(String user, String password) { 
    String str = "{" + 
      "\"username\": \"" + user + "\", " + 
      "\"password\": \"" + password + "\"" + 
      "}"; 
    System.out.println(str); 
    return str; 
} 

public static void main(String[] args) throws IOException { 
    PostExample example = new PostExample(); 
    String json = example.bowlingJson(args[0], args[1]); 
    String response = example.post("http://192.168.43.123:8000/api/jwt-auth/", json); 
    System.out.println(args[0] + " " + args[1]); 
    System.out.println(response); 
} 
} 

Cela fonctionne bien, il me donne un objet JSON en tant que chaîne en réponse. Et étant donné ci-dessous est la presque même chose lorsqu'il est utilisé avec Volley, juste la différence qu'il me donne 400 Erreur

public class PostAssistant {

private Context context; 
    private RequestQueue queue; 

    public PostAssistant(Context context) { 
     this.context = context; 
     queue = Volley.newRequestQueue(context); 
    } 

    private void post(String url, final String user , final String password) throws IOException { 
     StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) { 
         // response 
         Log.d("Response", response); 
        } 
       }, 
       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         // error 
         Log.d("Error.Response", ""); 
        } 
       } 
     ) 
     { 
      @Override 
      protected Map<String, String> getParams() 
      { 
       Map<String, String> params = new HashMap<>(); 
       params.put("username", user); 
       params.put("password", password); 

       return params; 
      } 

      @Override 
      public String getBodyContentType() 
      { 
       return "application/json"; 
      } 
     }; 
     queue.add(postRequest); 
    } 

    private void connect(String user, String password) throws IOException { 
     post(Constants.loginUrl , user , password); 
    } 

    public void connect(String[] args) throws IOException { 
     connect(args[0] , args[1]); 
    } 
} 

C'est l'erreur comme indiqué dans le logcat:

E/Volley: [5322] BasicNetwork.performRequest: Unexpected response code 400 for http://192.168.43.123:8000/api/jwt-auth/ 

Répondre

0

Je l'ai fixé en changeant la getBodyContentType()-getHeaders()

 @Override 
     public Map<String , String> getHeaders() 
     { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("Content-Type", "application/json"); 
      return params; 
     }