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

截击Post请求,在Json数组请求中发送Json对象

南门英飙
2023-03-14

用简单的话来说,我想发送这个{"Id": 7,"Name":"MyName"}数据到服务器,使用Volley Post Request。

它有一个整数和一个字符串,我得到的响应是Jsonarray

我尝试过以下方法,但都不管用

>

  • 因为它是json数组请求,我不能在参数中发送数据,因为第三个参数只需要JsonArray,我必须发送JsonObject,所以保持为null

    new JsonArrayRequest(方法、Url、JsonArray、ResponseListener、ErrorListner)

    我不能把它放在HashMap中,因为值的1是整数,并且它只接受字符串

    getparams()方法

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> params=new HashMap<>();
        params.put("Id",7); //            <====== This is Invalid
        params.put("Name","MyName");
        return params;
    }
    
    • 我试图发送getbody方法,但仍然不起作用

    getbody方法

    @Override
    public byte[] getBody() {
        String body="{\"Id\":7,\"Name\":\"MyName\"}";
        return body.getBytes();
    }
    

    我可以使用HttpUrlConnection获得响应。

    凌空抽射还有其他方法可以实现吗?

  • 共有3个答案

    明星剑
    2023-03-14
     JSONObject jsonObject = new JSONObject();
        try {
            // user_id, comment_id,status
            jsonObject.put("user_id", your_data);
            jsonObject.put("comment_id", your_data);
            jsonObject.put("status", your_data);
            jsonObject.put("token", your_data);
        } catch (Exception e) {
            e.printStackTrace();
        }
    
     JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
                YOUR_API _NAME, jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
    
     //  YOUR RESPONSE 
    }
       }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
    
            }
        });
       mRequestQueue.add(jsonObjReq);
    

    // } }

    贺立果
    2023-03-14

    看起来它在最近的版本中被删除了,但是你可以很容易地修改这个构造函数并添加到JsonArrayRequest

    public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
                                Listener<JSONArray> listener, ErrorListener errorListener) {
            super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
                    errorListener);
        }
    
    宫高义
    2023-03-14

    多亏了akash93,我终于做到了。下面是如何做到的

    编写一个类MyJsonArrayRequest。下面是java

    import com.android.volley.NetworkResponse;
    import com.android.volley.ParseError;
    import com.android.volley.Response;
    import com.android.volley.toolbox.HttpHeaderParser;
    import com.android.volley.toolbox.JsonRequest;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.io.UnsupportedEncodingException;
    public class MyJsonArrayRequest extends JsonRequest<JSONArray> {
    
    
        public MyJsonArrayRequest(int method, String url, JSONObject jsonRequest,
                                  Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) {
            super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
                    errorListener);
        }
    
        @Override
        protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
            try {
                String jsonString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
                return Response.success(new JSONArray(jsonString),
                        HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                return Response.error(new ParseError(e));
            } catch (JSONException je) {
                return Response.error(new ParseError(je));
            }
        }
    

    用法:

     MyJsonArrayRequest request=new MyJsonArrayRequest(Request.Method.POST, Constants.SEARCH_PROFILE, object, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
    
                Log.i("onResponse", ""+response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                Log.i("onErrorResponse", "Error");
            }
        });
    

    更简单的方法是重写getBody(),它应该可以工作,但在某种程度上,它第一次对我不起作用。

     @Override
    public byte[] getBody() {
        String body="{\"Id\":7,\"Name\":\"MyName\"}";
        return body.getBytes();
    }
    
     类似资料:
    • 我得到以下错误 响应数据为空。我做错了什么,或者我在代码中遗漏了什么?

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

    • 我有一个对象,作为另一个GET请求的响应接收它<代码>jsonElement。toString() 看起来像JSON数组: 我需要通过另一个使用改装的POST请求发送此字符串。如何通过POST请求发送jsonElement或String对象?我的方法声明应该怎么看?例如:

    • 问题内容: 我已经开发了一个Java代码,该代码使用URL和HttpUrlConnection将以下cURL转换为Java代码。卷曲是: 我已经编写了此代码,但是它始终会给HTTP代码400错误的请求。我找不到丢失的内容。 问题答案: 你的JSON不正确。代替 写 因此,JSONObject.toString()应该只为外部对象调用一次。 另一件事(可能不是你的问题,但我想提一下): 为确保不会遇

    • 我已经写了这段代码,但它总是给HTTP代码400错误的请求。我找不到丢失的东西。

    • 问题内容: 我正在使用Retrofit集成我的Web服务,但我不明白如何使用POST请求将JSON对象发送到服务器。我目前陷入困境,这是我的代码: 活动:- PostInterface:- 要求JSON:- 响应JSON:- 问题答案: 在gradle中使用这些 使用这两个POJO类........ LoginData.class LoginResult.class 像这样使用API 使用这样的呼