简体   繁体   English

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

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

I am using framework in which I simply pass a java object. 我使用的框架中只是传递了一个Java对象。 Framework methods and classes converts this object to json string and makes a post request. 框架方法和类将此对象转换为json字符串,并发出发布请求。 Also I am getting response as java object. 我也得到响应作为java对象。

This same thing I wish to implement using volley library 我想使用排球库实现同样的事情

I just want to pass Java request object and in response also want java object 我只想传递Java请求对象,而作为响应,也要传递Java对象

Please suggest me a way how could I do that. 请给我建议一种方法。

Thanks... 谢谢...

I have something that might help you starting. 我有一些可以帮助您入门的东西。 Just create your BaseRequest where you pass what you are expecting as Response. 只需在传递期望的响应的位置创建BaseRequest。 Son library takes care of converting your Json to you Java Object type. Son库负责将Json转换为Java Object类型。

BaseRequest 基本请求

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

The method parseNetworkResponse will take care of converting your Json to Java Object type. parseNetworkResponse方法将负责将您的Json转换为Java Object类型。

Now you can create a class for each Request, for example Login: 现在,您可以为每个请求创建一个类,例如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;
}
}

Finally create the call for your request (inside your activity, fragment, wherever you need): 最后,为您的请求创建调用(在活动,片段中,无论您需要的位置):

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

This way you will receive the objects you want, parsed from Gson. 这样,您将收到从Gson解析的所需对象。

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

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