OKHttp简单二次封装
2018-02-27 10:19
337 查看
倒入依赖:
1,定义请求结果回调接口
NetTool.getInstance().startRequest(url,实体类.class,callback回调);原文链接:点击打开链接
compile 'com.squareup.okhttp3:okhttp:3.6.0' compile 'com.google.code.gson:gson:2.8.0'代码部分:
1,定义请求结果回调接口
public interface CallBack<T> { //请求数据成功时回调的方法 形参类型不确定 所以写成泛型的形式 void onSuccess(T response); //请求数据失败时回调的方法 void onError(Throwable e); }2,定义请求数据回调接口
public interface NetInterface { //请求数据 形参是url和请求成功传入的数据(因为这个没有解析的操作 只是拉取了数据 所以没有用到实体类(我们在解析的时候需要url和实体类)) void startRequest(String url, CallBack<String> callBack); //请求并且解析数据 形参是url,实体类,解析好的数据 <T> void startRequest(String url, Class<T> tClass, CallBack<T> callBack); }3,OKTool工具类:
public class OkTool implements NetInterface { //声明OkHttpClient对象 private OkHttpClient okHttpClient; //声明解析用的Gson对象 private Gson gson; //保证能将子线程中的数据传到主线程中(因为子线程不能操作UI) private Handler handler = new Handler(Looper.getMainLooper()); public OkTool() { //第一步:初始化OkHttpClient对象 并对其设置一些属性 okHttpClient = new OkHttpClient.Builder().connectTimeout(5, TimeUnit.SECONDS) .cache(new Cache(Environment.getExternalStorageDirectory(), 10 * 1024 * 1024)) .retryOnConnectionFailure(true) .build(); //初始化Gson对象 gson = new Gson(); } @Override public void startRequest(String url, CallBack<String> callBack) { } @Override public <T> void startRequest(final String url, final Class<T> tClass, final CallBack<T> callBack) { //第二步:初始化请求对象 Request request = new Request.Builder().url(url).build(); //第三步:进行异步请求 //⬇️这是进行异步请求的方法 okHttpClient.newCall(request).enqueue(new Callback() { //拉取数据失败 @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { callBack.onError(e); } }); } //成功拉取数据 @Override public void onResponse(final Call call, final Response response) throws IOException { //拉取网络数据 String str = response.body().string(); //解析网络数据 final T result = gson.fromJson(str,tClass); handler.post( new Runnable() { @Override public void run() { callBack.onSuccess(result); } }); } }); } }4,NetTool工具类(主要就是想要将okHttpClient对象单例化):
public class NetTool implements NetInterface { private static NetTool ourInstance; //声明NetInterface接口对象 private NetInterface netInterface; public static NetTool getInstance() { //单例模式 保证了全局只用这一个对象 if (ourInstance == null){ synchronized (NetTool.class){ if (ourInstance == null){ ourInstance = new NetTool(); } } } return ourInstance; } private NetTool() { //在构造方法中对其进行初始化 netInterface = new OkTool(); } @Override public void startRequest(String url, CallBack<String> callBack) { } @Override public <T> void startRequest(String url, Class<T> tClass, CallBack<T> callBack) { netInterface.startRequest(url,tClass,callBack); } }使用方法:
NetTool.getInstance().startRequest(url,实体类.class,callback回调);原文链接:点击打开链接
相关文章推荐
- Okhttp简单的二次封装
- Okhttp的简单二次封装
- okhttp简单的二次封装
- [置顶] Retrofit和OkHttp简单的二次封装
- OkHttp简单封装,添加泛型
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- 简单的封装okhttp
- 简单的Retrofit+Rxjava二次封装
- iOS基于MBProgressHUD的二次封装,一行搞定,使用超简单
- [Android]OkHttp的简单封装-辅助框架
- 基于okhttp的简单封装
- Retrofit的简单封装--更方便的配置okhttp
- OkHttp简单的封装及使用
- okhttp简单封装
- 二次封装OKHttp网络框架(1)
- Volley简单二次封装代码
- retrofit2.0+okhttp3+rxjava的封装(简单好用)
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- 关于okhttp的二次封装
- AFN的简单二次封装