繁体   English   中英

如何自定义Volley库以将发布请求作为Java对象进行获取以作为Java对象获得响应

[英]How can I Customize Volley Library to make post request as java object to get response as java Object

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

我想使用排球库实现同样的事情

我只想传递Java请求对象,而作为响应,也要传递Java对象

请给我建议一种方法。

谢谢...

我有一些可以帮助您入门的东西。 只需在传递期望的响应的位置创建BaseRequest。 Son库负责将Json转换为Java Object类型。

基本请求

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);
}
}

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

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

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;
}
}

最后,为您的请求创建调用(在活动,片段中,无论您需要的位置):

LoginRequest request = new LoginRequest<>("aaaa@email.com", "myDummyPassword", LoginResponseModel.class, new Response.Listener<LoginResponseModel>() {
        @Override
        public void onResponse(LoginResponseModel loginResponseModel) {
            //Success
        }
    }, new BaseError(getApplicationContext()) {
        @Override
        public void onError(ErrorResponse response) {
            //Erros
        }
    });

这样,您将收到从Gson解析的所需对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM