Android Volley不使用自定义请求传递post参数

时间:2015-07-23 12:02:30

标签: android parameters android-volley http-status-code-400 network-connection

我正在使用volley来处理简单的REST请求并在其中传递一些post参数。但它始终给出回复[^\s]*

我尝试过以下自定义请求。

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; } } 并在其中传递参数。但它没有传递参数并抛出错误400.我尝试了许多建议herehere但是没有任何方法可以帮助我。 Volley有没有错误。 ?

请指导。

1 个答案:

答案 0 :(得分:0)

getBody()课程中使用getParams()代替Request时,它适用于我。

您应该使用JSONObject代替HashMap 把你的参数

。 然后将JSONObject转换为字符串并将字符串转换为getBody方法中的字节。

使用此链接获取更多解释。 How to send a POST request using volley with string body?

希望我的回答足够清楚。