如何自定义Volley Library以使用java对象发布post请求以获取响应为java Object

时间:2015-09-01 07:00:31

标签: java android android-volley

我正在使用框架,我只是传递一个java对象。框架方法和类将此对象转换为json字符串并发出post请求。我也得到了作为java对象的响应。

我希望用volley库实现同样的东西

我只想传递Java请求对象,并且在响应中也想要java对象

请建议我如何做到这一点。

谢谢...

1 个答案:

答案 0 :(得分:0)

我有一些东西可以帮助你开始。 只需创建您的BaseRequest,您可以在其中传递您期望的响应。子库负责将您的Json转换为Java对象类型。

BaseRequest

src/pages/login.html

方法 parseNetworkResponse 将负责将您的Json转换为Java对象类型。

现在您可以为每个请求创建一个类,例如Login:

public class BaseRequest<T> extends Request<T> {

private final Class<T> resultClass;
private final Response.Listener<T> listener;
Gson gson = new Gson();

private final int REQUEST_TIMEOUT_LIMIT_SECONDS = 10; // Value in seconds

public BaseRequest(int method, String url, Class<T> resultClass, Response.Listener<T> listenerSuccess, Response.ErrorListener listenerError) {
    super(method, url, listenerError);
    this.resultClass = resultClass;
    this.listener = listenerSuccess;

    this.setRetryPolicy(new DefaultRetryPolicy(REQUEST_TIMEOUT_LIMIT_SECONDS * 1000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

}

@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
    try {
        String json = new String(
                response.data,
                HttpHeaderParser.parseCharset(response.headers));
        return Response.success(
                gson.fromJson(json, resultClass),
                HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    } catch (JsonSyntaxException e) {
        return Response.error(new ParseError(e));
    }
}

@Override
protected void deliverResponse(T response) {
    listener.onResponse(response);
}
}

最后创建对您的请求的调用(在您的活动,片段,您需要的任何地方):

public class LoginRequest<T> extends BaseRequest<T> {

private final Gson gson = new Gson();
private final String email;
private final String password;

public LoginRequest(String email, String password, Class<T> clazz,
                    Response.Listener<T> listener, Response.ErrorListener errorListener) {

    super(Request.Method.POST, "url here...", clazz, listener, errorListener);

    this.email = email;
    this.password = password;
}


@Override
protected Map<String, String> getParams() throws AuthFailureError {
    Map<String, String> params = new HashMap<>();
    params.put("param1", email);
    params.put("param2", password);
    return params;
}
}

通过这种方式,您将收到所需的对象,并从Gson中解析。