public class ApiClient {
/**
* @param context
*
* @param requestQueue RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。
* RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,
* 这是非常浪费资源的, 在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。
*
* @param baseRequest
*
* @param apiClientCB
*
*/
public static void doRequest(final Context context, RequestQueue requestQueue, final BaseRequest baseRequest, final ApiClientCB apiClientCB) {
if (baseRequest.getRequestMethod().equals(AppConfig.GET_METHOD)) {
StringRequest request = new StringRequest(baseRequest.getCompleteUrl(baseRequest),
/** Callback interface for delivering parsed responses. */
new Response.Listener() {
@Override
public void onResponse(String response) {
BaseResponse baseResponse = BaseResponse.parseBase(response);
LogUtil.showBaseResponse(context, baseResponse);
if (apiClientCB != null) {
apiClientCB.responseSuccess(response);
// 0 | 1 | >1
if (baseResponse.getCode().equals("0")) {
apiClientCB.responseCode0(response);
} else if (baseResponse.getCode().equals("1")) {
apiClientCB.responseCode1(response);
} else {
apiClientCB.responseCodeMore1(response);
}
}
}
},
/** Callback interface for delivering error responses. */
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (apiClientCB != null) {
apiClientCB.responseFailed(error.getMessage());
}
}
});
// 执行HTTP get请求
requestQueue.add(request);
}
if (baseRequest.getRequestMethod().equals(AppConfig.POST_METHOD)) {
StringRequest request = new StringRequest(Method.POST, baseRequest.getCompleteUrl(baseRequest),
new Response.Listener() {
@Override
public void onResponse(String response) {
BaseResponse baseResponse = BaseResponse.parseBase(response);
LogUtil.showBaseResponse(context, baseResponse);
if (apiClientCB != null) {
apiClientCB.responseSuccess(response);
// 0 | 1 | >1
if (baseResponse.getCode().equals("0")) {
apiClientCB.responseCode0(response);
} else if (baseResponse.getCode().equals("1")) {
apiClientCB.responseCode1(response);
} else {
apiClientCB.responseCodeMore1(response);
}
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (apiClientCB != null) {
apiClientCB.responseFailed(error.getMessage());
}
}
}) {
/**
* 可是这只是指定了HTTP请求方式是POST,那么我们要提交给服务器的参数又该怎么设置呢?很遗憾,StringRequest中并没有提供设置POST参数的方法,
* 但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法自然也就有了,
* 我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了
*
*/
@Override
protected Map getParams() throws AuthFailureError {
return baseRequest.getParameters();
}
};
// 执行HTTP post请求
requestQueue.add(request);
}
}
}
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这也叫封装啊?