2014-06-18 1 views
13

J'essaye de poster quelques paramètres à mes rails API en utilisant Volley dans Android. C'est le code:Volley ne m'appelle pas getParams() pour la demande POST standard

J'ai essayé avec deux déclarations de journal, une en getParams() et une autre en getHeaders(). Celui en getHeaders() est enregistré tandis que l'autre ne l'est pas. Pourquoi volley ignore-t-il getParams()?

{ 
//full_name,email,password are private variables defined for this class 

String url = "http://10.0.2.2:3000/users/sign_up.json" ; 

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, 
       url, null, 
       new Response.Listener<JSONObject>() { 

        @Override 
        public void onResponse(JSONObject response) { 
         Log.d(TAG, response.toString()); 
         pDialog.hide(); 
        } 
       }, new Response.ErrorListener() { 

        @Override 
        public void onErrorResponse(VolleyError error) { 
         VolleyLog.d(TAG, "Error: " + error.getMessage()); 
         pDialog.hide(); 
        } 
       }) { 

      @Override 
      public Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 

       //This does not appear in the log 
       Log.d(TAG,"Does it assign params?") ; 


       params.put("name", full_name.getText().toString()); 
       params.put("email",email.getText().toString()); 
       params.put("password", password.getText().toString()); 

       return params; 
      } 
      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 

       //This appears in the log 
       Log.d(TAG,"Does it assign headers?") ; 

       HashMap<String, String> headers = new HashMap<String, String>(); 
       headers.put("Content-Type", "application/json; charset=utf-8"); 

       return headers; 
      } 

     }; 

     // Adding request to request queue 
     VHelper.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); 

} 
+1

Il est assez facile à résoudre, vérifiez ma réponse [ici] (http://stackoverflow.com/a/24402403/1294681). – VinceStyling

Répondre

26

L'utilisation StringRequest en place de JsonObjectRequest

StringRequest sr = new StringRequest(Request.Method.POST, url , new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, response.toString()); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error: " + error.getMessage()); 
      Log.d(TAG, ""+error.getMessage()+","+error.toString()); 
     } 
    }){ 
     @Override 
     protected Map<String,String> getParams(){ 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("id", "28"); 
      params.put("value", "1"); 

      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String,String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type","application/x-www-form-urlencoded"); 
      headers.put("abc", "value"); 
      return headers; 
     } 
    }; 

     AppController.getInstance().addToRequestQueue(sr); 
+4

Je ne peux pas croire que c'était ça. J'utilisais JSONObjectRequest et le débogueur n'atteignait jamais la méthode getParams(), donc pas de paramètres POST. Au moment où je suis passé à StringRequest, le débogueur a tapé getParams(). ¬_¬ –

+1

Merci beaucoup! Vous avez sauvé ma journée –

+3

Merci, vous avez sauvé ma journée. Y a-t-il une raison pour que JsonObjectRequest ne provoque pas l'invocation de la méthode getParams surchargée? – Ajay

1

Le troisième paramètre doit être un JSONObject vous ne avez pas besoin la méthode getParams() les passer juste dans la demande.

JsonObjectRequest jsonObjReq = new JsonObjectRequest(
      method, 
      url, 
      jsonObjParams, // <<< HERE 
      responseListener, 
      errorListener); 
0

Pour JSONobjectRequest les getParams() ne fonctionne pas pour les requêtes POST de sorte que vous devez faire un customRequest et remplacer la méthode getParams() là-bas. C'est parce que JsonObjectRequest est étendu JsonRequest qui remplace directement la méthode getBody(), donc votre getParam() ne pourra jamais invoquer. Pour invoquer votre méthode getParams(), vous devez d'abord remplacer getBody(). Ou pour une solution simple, vous pouvez utiliser StringRequest.

0

il est arrivé parce que Volley Params cache.

propre comme ça

requestQueue.getCache().clear();

espère qu'il est utile!

Questions connexes