Android使用okhttpfinal+gson实现网络请求
近期整理了[okhttpfinal][6]+[gson][6] 实现网络请求和解析功能,特做此笔记:
代码部分
首先需要在build.gradle中导入包okhttpfinal,gson:
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.jakewharton:butterknife:7.0.0'
在使用okhttpfinal之前需要初始化,建议放到Application中
/**
* 初始化OkHttpFinal
*/
OkHttpFinalConfiguration.Builder builder = new OkHttpFinalConfiguration.Builder();
//设置请求超时时间
builder.setTimeout(60000);
//初始化OkHttpFinalConfiguration
OkHttpFinal.getInstance().init(builder.build());
创建IRequestCallback接口用来返回请求状态
public interface IRequestCallback<T> {
/**
* 执行网络访问之前的操作
*/
void onStart(String msg);
/**
* 返回结果错误或解析失败
*/
void onFailed(String msg);
/**
* 返回结果成功或解析成功
*/
void onSuccessed(T t);
}
构建RequestParamsBuilder请求头类,用来封装公共请求头
public class RequestParamsBuilder {
public static RequestParams buildRequestParams(HttpCycleContext context) {
String token = "";
RequestParams params = new RequestParams(context);
/**
* 公共请求头
*/
params.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
/**
* 登录状态的token
*/
// params.addFormDataPart("token","token");
return params;
}
/**
* 服务端返回错误信息,解析得到message
* 如果返回数据解析异常时可调用该方法
*/
public static String getMessage(String errorJson) {
try {
Gson gson = new Gson();
NetErrorBean errorBean = gson.fromJson(errorJson, NetErrorBean.class);
String errorMsg = errorBean.getMessage();
errorMsg = errorMsg == null ? "" : errorJson;
return errorMsg;
} catch (Exception e) {
return e.getMessage();
}
}
}
至于NetErrorBean类里面只包括了
/**
* key :
* message :
*/
创建RequestServer类
public class RequestServer {
private HttpCycleContext context;
public RequestServer(HttpCycleContext context) {
this.context = context;
}
//传字符串参数
public void getRequestServer(String request, IRequestCallback<DataResponse> callback) {
RequestParams requestParams = RequestParamsBuilder.buildRequestParams(context);
requestParams.addFormDataPart("request", request);
getRequestServer(requestParams,callback);
}
//直接请求对象的参数
public void getRequestServer(RequestParams params, final IRequestCallback<DataResponse> call) {
final String msg = "";
HttpRequest.get("http://wthrcdn.etouch.cn/weather_mini?", params, new BaseHttpRequestCallback() {
@Override
public void onStart() {
super.onStart();
if (call != null) {
call.onStart(msg);
}
}