OkHttp网络连接工具类
来源:互联网 发布:淘宝网男手提包 编辑:程序博客网 时间:2024/06/05 03:45
/**
*
* Description : OkHttp网络连接封装工具类 解析用的是Gson 记得添加Gson依赖 或者jar包
*/
public class OkHttpUtils {
private static final String TAG = "OkHttpUtils";
private static OkHttpUtils mInstance;
private OkHttpClient mOkHttpClient;
private OkHttpClient.Builder mBuilder;
private Handler mDelivery;
private Gson mGson;
private OkHttpUtils() {
mBuilder = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS);
mOkHttpClient = mBuilder.build();
mGson = new Gson();
mDelivery = new Handler(Looper.getMainLooper());
}
private synchronized static OkHttpUtils getmInstance() {
if (mInstance == null) {
mInstance = new OkHttpUtils();
}
return mInstance;
}
/**
* 生成Get的Request对象
* @param url
* @param callback
*/
private void getRequest(String url, final ResultCallback callback) {
final Request request = new Request.Builder().url(url).build();
deliveryResult(callback, request);
}
/**
* 生成Post的Request对象
* @param url
* @param callback
* @param params
*/
private void postRequest(String url, final ResultCallback callback, List<Param> params) {
Request request = buildPostRequest(url, params);
deliveryResult(callback, request);
}
/**
* 生成带Header的Request对象
* @param url
* @param callback
* @param params
* @param header
*/
private void postRequest(String url, final ResultCallback callback, List<Param> params,List<Param> header) {
Request request = buildPostRequest(url, params,header);
deliveryResult(callback, request);
}
/**
* 处理结果
* @param callback
* @param request
*/
private void deliveryResult(final ResultCallback callback, Request request) {
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
sendFailCallback(callback, e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
String str = response.body().string();
if (callback.mType == String.class) {
/**
* 返回字符串
*/
sendSuccessCallBack(callback, str);
} else {
/**
* 这里处理解析返回对象
*/
Object object = mGson.fromJson(str, callback.mType);
sendSuccessCallBack(callback, object);
}
} catch (final Exception e) {
// LogUtils.e(TAG, "convert json failure", e);
sendFailCallback(callback, e);
}
}
});
}
private void sendFailCallback(final ResultCallback callback, final Exception e) {
mDelivery.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onFailure(e);
}
}
});
}
private void sendSuccessCallBack(final ResultCallback callback, final Object obj) {
mDelivery.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onSuccess(obj);
}
}
});
}
private Request buildPostRequest(String url, List<Param> params) {
FormBody.Builder builder= new FormBody.Builder();
for (Param param : params) {
builder.add(param.key, param.value);
}
RequestBody requestBody = builder.build();
return new Request.Builder().url(url).post(requestBody).build();
}
private Request buildPostRequest(String url, List<Param> params,List<Param> header) {
FormBody.Builder builder= new FormBody.Builder();
Request.Builder request = new Request.Builder().url(url);
for (Param param : params) {
builder.add(param.key, param.value);
}
for (Param param : header){
request.addHeader(param.key,param.value);
}
RequestBody requestBody = builder.build();
return request.post(requestBody).build();
}
/**********************对外接口************************/
/**
* get请求
* @param url 请求url
* @param callback 请求回调
*/
public static void get(String url, ResultCallback callback) {
getmInstance().getRequest(url, callback);
}
/**
* post请求
* @param url 请求url
* @param callback 请求回调
* @param params 请求参数
*/
public static void post(String url, final ResultCallback callback, List<Param> params) {
getmInstance().postRequest(url, callback, params);
}
public static void post(String url, final ResultCallback callback, List<Param> params,List<Param> header) {
getmInstance().postRequest(url, callback, params,header);
}
/**
* http请求回调类,回调方法在UI线程中执行
* @param <T>
*/
public static abstract class ResultCallback<T> {
Type mType;
public ResultCallback(){
mType = getSuperclassTypeParameter(getClass());
}
static Type getSuperclassTypeParameter(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]);
}
/**
* 请求成功回调
* @param response
*/
public abstract void onSuccess(T response);
/**
* 请求失败回调
* @param e
*/
public abstract void onFailure(Exception e);
}
/**
* post请求参数类 这里可以根据项目抽取成泛型
*/
public static class Param {
String key;
String value;
public Param() {
}
public Param(String key, String value) {
this.key = key;
this.value = value;
}
}
}
*
* Description : OkHttp网络连接封装工具类 解析用的是Gson 记得添加Gson依赖 或者jar包
*/
public class OkHttpUtils {
private static final String TAG = "OkHttpUtils";
private static OkHttpUtils mInstance;
private OkHttpClient mOkHttpClient;
private OkHttpClient.Builder mBuilder;
private Handler mDelivery;
private Gson mGson;
private OkHttpUtils() {
mBuilder = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS);
mOkHttpClient = mBuilder.build();
mGson = new Gson();
mDelivery = new Handler(Looper.getMainLooper());
}
private synchronized static OkHttpUtils getmInstance() {
if (mInstance == null) {
mInstance = new OkHttpUtils();
}
return mInstance;
}
/**
* 生成Get的Request对象
* @param url
* @param callback
*/
private void getRequest(String url, final ResultCallback callback) {
final Request request = new Request.Builder().url(url).build();
deliveryResult(callback, request);
}
/**
* 生成Post的Request对象
* @param url
* @param callback
* @param params
*/
private void postRequest(String url, final ResultCallback callback, List<Param> params) {
Request request = buildPostRequest(url, params);
deliveryResult(callback, request);
}
/**
* 生成带Header的Request对象
* @param url
* @param callback
* @param params
* @param header
*/
private void postRequest(String url, final ResultCallback callback, List<Param> params,List<Param> header) {
Request request = buildPostRequest(url, params,header);
deliveryResult(callback, request);
}
/**
* 处理结果
* @param callback
* @param request
*/
private void deliveryResult(final ResultCallback callback, Request request) {
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
sendFailCallback(callback, e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
String str = response.body().string();
if (callback.mType == String.class) {
/**
* 返回字符串
*/
sendSuccessCallBack(callback, str);
} else {
/**
* 这里处理解析返回对象
*/
Object object = mGson.fromJson(str, callback.mType);
sendSuccessCallBack(callback, object);
}
} catch (final Exception e) {
// LogUtils.e(TAG, "convert json failure", e);
sendFailCallback(callback, e);
}
}
});
}
private void sendFailCallback(final ResultCallback callback, final Exception e) {
mDelivery.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onFailure(e);
}
}
});
}
private void sendSuccessCallBack(final ResultCallback callback, final Object obj) {
mDelivery.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onSuccess(obj);
}
}
});
}
private Request buildPostRequest(String url, List<Param> params) {
FormBody.Builder builder= new FormBody.Builder();
for (Param param : params) {
builder.add(param.key, param.value);
}
RequestBody requestBody = builder.build();
return new Request.Builder().url(url).post(requestBody).build();
}
private Request buildPostRequest(String url, List<Param> params,List<Param> header) {
FormBody.Builder builder= new FormBody.Builder();
Request.Builder request = new Request.Builder().url(url);
for (Param param : params) {
builder.add(param.key, param.value);
}
for (Param param : header){
request.addHeader(param.key,param.value);
}
RequestBody requestBody = builder.build();
return request.post(requestBody).build();
}
/**********************对外接口************************/
/**
* get请求
* @param url 请求url
* @param callback 请求回调
*/
public static void get(String url, ResultCallback callback) {
getmInstance().getRequest(url, callback);
}
/**
* post请求
* @param url 请求url
* @param callback 请求回调
* @param params 请求参数
*/
public static void post(String url, final ResultCallback callback, List<Param> params) {
getmInstance().postRequest(url, callback, params);
}
public static void post(String url, final ResultCallback callback, List<Param> params,List<Param> header) {
getmInstance().postRequest(url, callback, params,header);
}
/**
* http请求回调类,回调方法在UI线程中执行
* @param <T>
*/
public static abstract class ResultCallback<T> {
Type mType;
public ResultCallback(){
mType = getSuperclassTypeParameter(getClass());
}
static Type getSuperclassTypeParameter(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]);
}
/**
* 请求成功回调
* @param response
*/
public abstract void onSuccess(T response);
/**
* 请求失败回调
* @param e
*/
public abstract void onFailure(Exception e);
}
/**
* post请求参数类 这里可以根据项目抽取成泛型
*/
public static class Param {
String key;
String value;
public Param() {
}
public Param(String key, String value) {
this.key = key;
this.value = value;
}
}
}
阅读全文
0 0
- OkHttp网络连接工具类
- OkHttp网络连接封装工具类
- OkHttp网络连接封装工具类
- OkHttp网络连接封装工具类以及json转换类
- OkHttp网络解析工具类
- 网络连接工具类
- 网络连接工具类
- 网络连接工具类
- okhttp与urlconnection连接网络
- 以OKHttp为基础封装网络请求工具类
- 网络请求Retrofit工具类 底层用okhttp
- 网络拦截器 okhttp工具类以及imageloder
- Android 网络连接工具类
- android网络连接工具类
- 请求网络连接工具类
- NetUtils网络连接工具类
- Android工具类--网络连接
- okhttp框架 工具类
- python3精简笔记(二)——函数
- java内存模型总结
- 2015多校第九场 HDU 5402 Travelling Salesman Problem 棋盘染色法,构造
- easyUI的课程表练习
- 【MySQL基础】如何选择存储引擎
- OkHttp网络连接工具类
- java编程思想笔记---并发Callable接口
- Linux shell命令之cat
- Typescript I: 遍历Array的方法:for, forEach, every等
- Highcharts图表-ajax-获取json数据生成图表
- _STL使用技巧_(不定时更新)
- spring常见问题
- UVa 514(栈)铁轨
- UI自动化测试经验之谈(二)