gpt4 book ai didi

android - Volley Post 请求,发送 Json 数组请求中的 Json 对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:32 26 4
gpt4 key购买 nike

简单来说,我想使用 Volley Post 请求将此 {"Id":7,"Name":"MyName"} 数据发送到服务器。

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

我尝试了以下方法,但都没有用

  • 因为它是 json 数组请求,所以我无法在参数中发送数据,因为第三个参数只接受 JsonArray,我必须发送 JsonObject,所以将其保留为 null

    新的 JsonArrayRequest(Method,Url,JsonArray,ResponseListener,ErrorListner)

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

获取参数() 方法

@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 方法发送,还是不行

获取主体方法

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

我可以使用 HttpUrlConnection 获得响应。

还有其他方法可以实现吗?

最佳答案

感谢 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();
}

关于android - Volley Post 请求,发送 Json 数组请求中的 Json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com