除了字符串之外的Android凌空邮件params

时间:2015-03-23 11:13:29

标签: android post request android-volley

我正在使用Volley lib来解雇我的请求。我创建了一个自定义类,它扩展Request<T>,如下所示:

class CustomRequest<T> extends Request<T>

使用GET的每个请求都能很好地工作。

我有一些关于POST方法的请求。例如登录需要登录和pwd,所以我在类的getParams()中放入Map,一切都很好。但是我在另一个请求上遇到了问题,因为我需要将params与任何类型的值放在一起,比如int,array等......这里的示例是设法在POST请求中传递它:

{"items":[12926315]}

那么,我怎么能这样做,因为Volley只接受Map,我当然得到400错误代码。

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

我刚刚发现它为什么不起作用,我需要覆盖getBodyContentType()方法

public String getBodyContentType()
    {
        return "application/json";
    }

现在它有效!希望这会有所帮助:)

答案 1 :(得分:0)

public class StringRequest extends Request<String> {
private final Listener<String> mListener;
/**
 * Creates a new request with the given method.
 *
 * @param method the request {@link Method} to use
 * @param url URL to fetch the string at
 * @param listener Listener to receive the String response
 * @param errorListener Error listener, or null to ignore errors
 */
public StringRequest(int method, String url, Listener<String> listener,
        ErrorListener errorListener) {
    super(method, url, errorListener);
    mListener = listener;
}
/**
 * Creates a new POST request.
 *
 * @param url URL to fetch the string at
 * @param listener Listener to receive the String response
 * @param errorListener Error listener, or null to ignore errors
 */
public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
    this(Method.POST, url, listener, errorListener);
}
@Override
protected void deliverResponse(String response) {
    mListener.onResponse(response);
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
    String parsed;
    try {
        parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
    } catch (UnsupportedEncodingException e) {
        parsed = new String(response.data);
    }
    return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}

}

希望这会很好。

答案 2 :(得分:0)

修改

因此,如果我使用下面的JsonObjectRequest并传递JSONObject POST数据,那么它的效果非常好,但我想在我的类getBody中将我的JSONObject发布到我的类中{ {1}}但它不起作用,因为JSONObject是我想的并且添加了一些引号

Request<T>

这是我的JSONObject:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, dataToPost,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("LOG", "+++++++++ success");
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("LOG", "--------- error");
                    }
                })
                {
                };

这里是getBody方法:

JSONObject dataToPost = new JSONObject();
JSONArray jsa = new JSONArray();
jsa.put(12926315);
jsa.put(12998018); 
dataToPost.put("items", jsa);

但是从服务器端,响应是{“items”:'[12926315,12998018]'},等待{“items”:[12926315,12998018]}

有什么想法吗?