用简单的话来说,我想发送这个{"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方法
@Override
public byte[] getBody() {
String body="{\"Id\":7,\"Name\":\"MyName\"}";
return body.getBytes();
}
我可以使用HttpUrlConnection获得响应。
凌空抽射还有其他方法可以实现吗?
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);
// } }
看起来它在最近的版本中被删除了,但是你可以很容易地修改这个构造函数并添加到JsonArrayRequest
。
public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
Listener<JSONArray> listener, ErrorListener errorListener) {
super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
errorListener);
}
多亏了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 使用这样的呼