2014-06-18 15 views
13

के लिए getParams() को कॉल नहीं कर रहा है, मैं एंड्रॉइड में वॉली का उपयोग करके अपने रेल एपीआई में कुछ पैरामीटर पोस्ट करने की कोशिश कर रहा हूं। यह कोड है:वॉली मानक POST अनुरोध

मैंने दो लॉग विवरणों के साथ प्रयास किया, एक getParams() में और दूसरा getHeaders() में। getHeaders() में से एक लॉग है जबकि दूसरा कोई नहीं है। वॉली 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

हल करने में काफी आसान है, मेरा जवाब देखें [यहां] (http://stackoverflow.com/a/24402403/1294681)। – VinceStyling

उत्तर

26

JsonObjectRequest के स्थान पर StringRequest का उपयोग

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

मुझे विश्वास नहीं है कि यह था। मैं JSONObjectRequest का उपयोग कर रहा था और डीबगर कभी GetParams() विधि को हिट नहीं करता था, इसलिए कोई पोस्ट पैरा नहीं। जिस क्षण मैं StringRequest में बदल गया, डीबगर ने getParams() को मारा। ¬_¬ –

+1

आपको बहुत बहुत धन्यवाद! आपने मेरा दिन –

+3

बचाया धन्यवाद, आपने मेरा दिन बचाया। क्या कोई कारण है कि JsonObjectRequest ओवरलोडेड GetParams विधि को लागू नहीं किया जा रहा है? – Ajay

1

कृपया getBody() विधि ओवरराइड, और यदि आपके सर्वर JSON अनुरोध पैरामीटर नहीं संभाल कर सकते हैं, तो आप getHeaders() ओवरराइड करने के लिए प्रक्रिया में परिवर्तन करना है आपकी सामग्री-प्रकार।

मुद्दा यहां पाया जा सकता है: https://github.com/mcxiaoke/android-volley/issues/82

1

तीसरे पैरामीटर JSONObject आप getParams() विधि सिर्फ अनुरोध में उन्हें पारित की जरूरत नहीं है होना चाहिए।

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

ताकि आप एक customRequest बनाने के लिए और वहाँ पर getParams ओवरराइड() विधि करने के लिए है JSONobjectRequest लिए getParams() पोस्ट अनुरोध के लिए काम नहीं करता। इसका कारण यह है कि JsonObjectRequest को JsonRequest बढ़ाया गया है जो सीधे प्राप्त करने के लिए बॉडी() विधि को ओवरराइड करता है, इसलिए आपका getParam() कभी भी नहीं आ जाएगा। अपने getParams() विधि को आमंत्रित करने के लिए आपको पहले GetBody() को ओवरराइड करना होगा। या एक साधारण समाधान के लिए आप StringRequest का उपयोग कर सकते हैं।

0

ऐसा इसलिए हुआ क्योंकि वॉली पैरा कैश।

स्वच्छ यह इस

requestQueue.getCache().clear();

की तरह आशा है कि यह उपयोगी है!

संबंधित मुद्दे