当前位置: 首页 > 知识库问答 >
问题:

Android截击未使用自定义请求传递post参数

吴浩博
2023-03-14

我使用截击来实现简单的REST请求,并在其中传递一些post参数。但它总是给出响应基本网络。性能请求:意外响应代码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。我在这里和这里尝试了许多建议,但都不管用。截击中有虫子吗?

请导游。

共有1个答案

邰建业
2023-03-14

Request类中使用getBody()而不是getParams()时,它对我有效。

还有一件事,你应该使用JSONObject而不是HashMap来放置你的参数

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

使用此链接了解更多说明。如何使用字符串体截击发送POST请求?

希望我的回答对你足够清楚。

 类似资料:
  • 我正在用GoogleVolley Api创建一个android应用程序,它处理我的应用程序和php脚本之间的连接。出于某种原因,该应用程序没有向我的服务器发送任何数据,也许这里的某个人可以找到它? 我的方法被正确调用,但是当我尝试打印它时,它返回null!一切实际上都在工作,除了数据没有正确传递,我相信,因为我的php脚本抱怨变量为空

  • 我正在使用截击与API交互。我需要向返回JSON数组的服务发送post请求(带参数)。 JsonObjectRequest有一个构造函数,它接受一个方法和一组参数 但是JSONArrayRequest(我需要的一个)只有一个构造函数的形式 我如何才能使其发送包含数据的POST请求?

  • 我试图在我的POST请求中传递一个应用程序特定的头,但是我得到了错误-步骤头XXX-XXX没有一个匹配的胶水代码。 如何在请求中指定特定于我的应用程序的头。以下是我正在提交的示例请求:

  • 当我做POST请求调用使用JsonObjectRequest在凌空然后在某些wifi它是发送空的身体。但是它可以很好地处理StringRequest POST请求。它在所有移动网络上都运行良好。 我正在使用node。js服务器和expressjs/body解析器。当我使用邮递员发出邮件请求时,一切正常。 错误是什么?如果有人想看我能提供的代码。 使用StringRequest的POST请求 POS

  • 这是我用来发出POST请求的一段代码。 在以前的项目中,一切都很好地工作,但现在的问题是,我想在帖子正文中包括布尔值和字符串值。 正文如下:{"email":"username@mail.com","密码":"Somepassword","rememberPassword": false,"ip_address":"152.57.31.41","isCaptchaEn的": false} 我不熟悉

  • 我看了关于截击的Google IO 2013课程,我正在考虑改用截击。Volley是否支持向请求添加POST/GET参数?如果是,我怎么做?