OKHTTP简单解析
来源:互联网 发布:太原软件 编辑:程序博客网 时间:2024/05/02 06:11
* Created by asus on 2016/10/17.
*/
public abstract class BaseCallBack<T> {
Type mType;
//下面方法是把T转换为type对象
static Type getSuperclassParameter(Class<?> subclass){
Type superclass=subclass.getGenericSuperclass();
if(superclass instanceof Class){
throw new RuntimeException("Missing type parameter");
}
ParameterizedType parameterized= (ParameterizedType) superclass;
return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
}
public BaseCallBack(){
mType=getSuperclassParameter(getClass());
}
public abstract void onRequsetBefore(Request request);
public abstract void onFailure(Call call, IOException e);
public abstract void onSuccess( Response response ,T t) ;
public abstract void onError( Response response,int code,Exception e) ;
}
*****************************************************************************************************************
/**
* Created by asus on 2016/10/17.
*/
public class OkhttpHelper {
private static OkHttpClient okHttpClient;
private Gson gson;
private Handler handler;
private OkhttpHelper() {
//进行实例化
okHttpClient=new OkHttpClient();
okHttpClient.newBuilder().connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
gson=new Gson();
handler=new Handler(Looper.getMainLooper());
}
;
public static OkhttpHelper getInstance() {
return new OkhttpHelper();
}
//get请求方法
public void get(String url, BaseCallBack callBack) {
Request request = buildRequset(url, null, HttpMethodType.GET);
doRequest(request, callBack);
}
//get请求方法
public void post(String url, Map<String, String> params, BaseCallBack callBack) {
Request request = buildRequset(url, params, HttpMethodType.GET);
doRequest(request, callBack);
}
//请求方法
public void doRequest(Request request, final BaseCallBack callBack) {
callBack.onRequsetBefore(request);
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
onFailure(call, e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
//得到解析的字符串
String resultStr = response.body().string();
if (callBack.mType == String.class) {
callBack.onSuccess(response, resultStr);
callbackSuccess(callBack,response, resultStr);
} else {
try {
Object object = gson.fromJson(resultStr, callBack.mType);
callbackSuccess(callBack,response,object);
} catch (JsonIOException e) {
callBack.onError(response, response.code(), e);
}
}
} else {
callBack.onError(response, response.code(), null);
}
}
});
}
private Request buildRequset(String url, Map<String, String> params, HttpMethodType methodType) {
Request.Builder builder = new Request.Builder();
builder.url(url);
//判断方法类型
if (methodType == HttpMethodType.GET) {
builder.get();
} else if (methodType == HttpMethodType.POST) {
RequestBody body = bulidFormData(params);
builder.post(body);
}
return builder.build();
}
private RequestBody bulidFormData(Map<String, String> params) {
FormBody.Builder bulider = new FormBody.Builder();
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
bulider.add(entry.getKey(), entry.getValue());
}
}
return bulider.build();
}
public void callbackSuccess(final BaseCallBack callback, final Response response, final Object object){
handler.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(response,object);
}
});
}
enum HttpMethodType {
GET,
POST
}
}
****************************************************************
OkhttpHelper.getInstance().get("http://lib.suning.com/app/redbaby/80000_5.0.0-459.json", new BaseCallBack<MyBean>()
- OKHTTP简单解析
- Okhttp之RouteSelector简单解析
- Okhttp源码简单解析(一)
- Android Okhttp+Retrofit2.0+RxJava简单解析
- OKhttp解析
- OKhttp解析
- OKHTTP解析
- OkHttp解析
- okhttp解析
- OkHttp解析
- Android网络框架:OKHttp源码简单解析(一)
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OKHTTP解析json数据
- Android OkHttp完全解析
- OKHttp源码解析
- OkHttp解析系列-开篇
- 11.13 模拟题
- [Sqoop]Sqoop导入与导出
- 趋势科技笔试题 DNA串查重 (4进制)
- android inline hook 学习笔记
- JSP+Servlet+JavaBean+JDBC实现用户登录,及成绩查询
- OKHTTP简单解析
- Swift 3.0:String初始化器Encoding不能为nil的解决
- 软件工程的生存周期
- 浅谈如何搭建互联网业务风控系统
- struct内存对齐
- JavaWeb session的使用和获取
- OpenCV读取视频
- OKhttp解析
- Okhttp