我正在使用框架,我只是传递一个java对象。框架方法和类将此对象转换为json字符串并发出post请求。我也得到了作为java对象的响应。
我希望用volley库实现同样的东西
我只想传递Java请求对象,并且在响应中也想要java对象
请建议我如何做到这一点。
谢谢...
答案 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中解析。