Intereting Posts
Что такое использование List <NameValuePair> или ArrayList <NameValuePair> Как ссылаться на текущую или основную деятельность из другого класса Использование ActionBarSherlock с новой поддержкой SupportMapFragment Android Player Player с использованием NDK, OpenGL ES и FFmpeg Пути рисования и аппаратное ускорение Возвращаемое значение из Thread APK подписал сертификат, который еще не действителен Javax.net.ssl.SSLException: SSL-квитирование отменено. Сброс соединения с помощью одноранговой сети при вызове webservice Android. Как отправить данные с одного устройства Android на другой? Признание нескольких ключевых слов с помощью PocketSphinx Checkbox не установлен, когда я просматриваю список на Android Как определить, отображается ли геоинформация в текущей области видимости? Как установить state_selected в ряби Как реализовать материальный дизайн Хореографическая анимация поверхности Как просмотреть Android ListView с настраиваемой строкой и заголовком

Волейбол, не вызывающий getParams () для стандартного запроса POST

Я пытаюсь опубликовать некоторые параметры в моем rails API, используя Volley в Android. Это код:

Я попробовал два оператора журнала: один в 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); } 

Solutions Collecting From Web of "Волейбол, не вызывающий getParams () для стандартного запроса POST"

Использование StringRequest вместо 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); 

Пожалуйста, переопределите метод getBody (), и если ваш сервер не может обрабатывать параметр запроса JSON, вы должны переопределить метод getHeaders (), чтобы изменить свой Content-Type.

Проблема может быть найдена здесь: https://github.com/mcxiaoke/android-volley/issues/82

Третий параметр должен быть JSONObject, который вам не нужен, метод getParams () просто передает их в запрос.

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

Для JSONobjectRequest getParams () не работает для запросов POST, поэтому вы должны сделать customRequest и переопределить метод getParams (). Его потому, что JsonObjectRequest расширен JsonRequest, который напрямую переопределяет метод getBody (), поэтому ваш getParam () никогда не будет вызывать. Чтобы вызвать метод getParams (), вам сначала нужно переопределить getBody (). Или для простого решения вы можете использовать StringRequest.

Это произошло из-за того, что волейбол задает кеш.

Очистите его так

requestQueue.getCache().clear();

Надеюсь, что это полезно!