Android Volley не передает параметры публикации с использованием пользовательского запроса

Я использую залп для простого запроса REST и передаю в него некоторые параметры сообщения. Но Он всегда давал ответ BasicNetwork.performRequest: Unexpected response code 400.

Я попытался выполнить пользовательский запрос.

   public class GsonRequestRest<T> extends Request<T>{

   private static final String PROTOCOL_CHARSET = "utf-8";
   private static final String PROTOCOL_CONTENT_TYPE = String.format("application/json; charset=%s", PROTOCOL_CHARSET);
   private final Listener<T> mListener;
   private final String mRequestBody;
   private Gson mGson;
   private Class<T> mJavaClass;
   private Map<String, String> params;
   public GsonRequestLoginRest(int method, String url, Class<T> cls, String requestBody, Map<String, String> params,Listener<T> listener,ErrorListener errorListener) {
        super(method, url, errorListener);
        mGson = new Gson();
        mJavaClass = cls;
        mListener = listener;
        mRequestBody = requestBody;
        this.params = params;
   }
   @Override
   protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
        return params;
   };
   @Override
   protected void deliverResponse(T response) {
        mListener.onResponse(response);
   }
   private Map<String, String> headers = new HashMap<String, String>();
   @Override
   public Map<String, String> getHeaders() throws AuthFailureError {
        return headers;
   }
    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            T parsedGSON = mGson.fromJson(jsonString, mJavaClass);

            return Response.success(parsedGSON,HttpHeaderParser.parseCacheHeaders(response));            
        } catch (IOException e) {
                Log.d("tag", e.getMessage());
                return Response.error(new ParseError(e));
            } catch (JsonSyntaxException je) {
                return Response.error(new ParseError(je));
            }
    }
    @Override
    public String getBodyContentType() {
        return PROTOCOL_CONTENT_TYPE;
    }
    @Override
    public byte[] getBody() {
        try {
            return mRequestBody == null ? null : mRequestBody.getBytes(PROTOCOL_CHARSET);
        } catch (UnsupportedEncodingException uee) {
            VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",mRequestBody, PROTOCOL_CHARSET);
            return null;
        }
    }
    //In your extended request class
    @Override
    protected VolleyError parseNetworkError(VolleyError volleyError){
        if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
            VolleyError error = new VolleyError(new String(volleyError.networkResponse.data));
            volleyError = error;
        }
        return volleyError;
    }
}

Я пытался переопределить getParams() и передать в него параметры. Но он не передавал параметры и выдавал ошибку 400. Я перепробовал множество предложений здесь и здесь, но у меня ничего не получилось . Есть ли ошибка в Volley. ?

Пожалуйста, направляйте.


comment
убедитесь, что вы отправляете все обязательные параметры на сервер. Вы получили 400 т.е. BAD_REQUEST означает отсутствие чего-то необходимого для этого запроса.   -  person Bharatesh    schedule 24.07.2015
comment
Я отправляю все необходимые параметры на сервер, но они не передаются на сервер с помощью getParams() и request body. Volley не отправляет параметры.   -  person Dory    schedule 24.07.2015
comment
Если я не ошибаюсь, getParams() выполняется только для POST запроса.   -  person Bharatesh    schedule 24.07.2015
comment
Я запрашиваю только POST запрос.   -  person Dory    schedule 24.07.2015


Ответы (1)


у меня это работает, когда я использую getBody() вместо getParams() в классе Request.

еще одна вещь, которую вы должны использовать JSONObject вместо HashMap, чтобы поместить свои параметры

. затем преобразуйте JSONObject в строку и преобразуйте строку в байт в методе getBody.

используйте эту ссылку для получения дополнительных объяснений. Как отправить запрос POST, используя залп со строкой тело?

Надеюсь, мой ответ достаточно прояснил для вас.

person Mina Samir    schedule 05.03.2017