封装Okhttp(Gson一起封装在里面减少了解析的操作)
2016-11-12 16:14
543 查看
public class OkSingle { protected static Context context; private static OkSingle okSingle; private static OkHttpClient mOkHttpClient; private static Gson gson; private static final int SUCCESS = 1; private static final int FAILED = 0; public OkSingle(OkHttpClient okHttpClient) { if (okHttpClient == null) { mOkHttpClient = new OkHttpClient(); } else { mOkHttpClient = okHttpClient; } //获取MyApplication的context context = MyApplication.context; gson = new Gson(); } public static OkSingle initClient(OkHttpClient okHttpClient) { if (okSingle == null) { synchronized (OkSingle.class) { if (okSingle == null) { okSingle = new OkSingle(okHttpClient); } } } return okSingle; } //获得单例的对象 public static OkSingle getInstance() { return initClient(null); } public <T> void getRequestAsync(String url, final GetResponse.ErrorListener errorListener, final GetResponse.Listener<T> listener, final Class<T> tClass) { Request request = new Request.Builder().url(url).build(); //这种写法,可以让Handler指定属于主线程 final Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SUCCESS: //成功时候的回调 listener.onResponse((T) msg.obj); break; case FAILED: errorListener.onErrorResponse(); break; } } }; mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { errorListener.onErrorResponse(); } @Override public void onResponse(Call call, Response response) throws IOException { try { String result = response.body().string(); T t = gson.fromJson(result, tClass); Message message = handler.obtainMessage();//这种写法比较省内存 message.what = SUCCESS; message.obj = t; handler.sendMessage(message); } catch (IOException e) { e.printStackTrace(); //因为是失败,所以返回失败,在主线程中判断 handler.sendEmptyMessage(FAILED); } } }); } //自定义接口 public interface GetResponse { //成功的接口 interface Listener<T> { void onResponse(T response); } //失败的接口 interface ErrorListener { void onErrorResponse(); } } }
相关文章推荐
- 学习笔记 Tianmao 篇 使用简单封装后的自定义OkHttp 获取json被GSON解析后的数据
- 学习笔记 Tianmao 篇 OkHttp 网络的使用的简单封装 获取Json用GSON来解析
- gson解析通过okhttp获取的json格式数据(转载)
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- [置顶] Volley简单封装之Gson解析
- Gson解析和封装json数据
- gson相关封装解析
- 7.zookeeper原理解析-序列化之底层通信数据封装与操作
- OKHttp 里面的Interceptor解析
- android之Gson解析json的封装
- 基于Retrofit、OkHttp、Gson封装通用网络框架
- RxJava+Retrofit+OkHttp深入浅出-终极封装六特殊篇(变种String替换Gson自由扩展)
- 将数据库常用的操作(连接数据库,获得所有数据,获得一条记录,获得一列记录,获得一条索引数组,获得一条关联数组)都给封装到db.class.php里面,谁需要谁继承这个类 注意:提交封装的类文件
- 解析发来的短信里面信息的操作
- 关于Gson解析Okhttp返回的json数据遇到的问题
- JAVA_Gson解析json工具类封装
- Gson解析和封装
- DOM4J操作XML(包含封装和解析)
- JS一起学05:Date对象、封闭空间、函数传参和封装、获取非行间样式、字符串操作
- OkHttp使用教程——网络操作之OkHttp, Volley以及Gson