Man*_*ddy 6 post android android-volley
简而言之,我想{"Id":7,"Name":"MyName"}使用 Volley Post 请求将此数据发送到服务器。
它有 1 个整数和 1 个字符串,我得到的响应是 Jsonarray
我尝试了以下方法,但没有一个有效
因为它是 json 数组请求,所以我无法在参数中发送数据,因为第三个参数只接受 JsonArray 并且我必须发送 JsonObject 所以将其保留为 null
new JsonArrayRequest(Method,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;
}
Run Code Online (Sandbox Code Playgroud)
获取主体方法
@Override
public byte[] getBody() {
String body="{\"Id\":7,\"Name\":\"MyName\"}";
return body.getBytes();
}
Run Code Online (Sandbox Code Playgroud)
我可以使用 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));
}
}
Run Code Online (Sandbox Code Playgroud)
用法 :
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");
}
});
Run Code Online (Sandbox Code Playgroud)
更简单的方法是覆盖 getBody()哪个应该有效,但在某种程度上它第一次对我不起作用。
@Override
public byte[] getBody() {
String body="{\"Id\":7,\"Name\":\"MyName\"}";
return body.getBytes();
}
Run Code Online (Sandbox Code Playgroud)
似乎它在最近的volley 版本中已被删除,但您可以轻松修改此构造函数并添加到JsonArrayRequest.
public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
Listener<JSONArray> listener, ErrorListener errorListener) {
super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
errorListener);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10809 次 |
| 最近记录: |