OKHttp使用之粗陋封装
来源:互联网 发布:中国突破第一岛链 知乎 编辑:程序博客网 时间:2024/06/16 03:41
使用单例模式维护一个特定配置的请求客户端
package com.itant.zhuling.tool.net;import android.content.Context;import java.util.concurrent.TimeUnit;import okhttp3.Cache;import okhttp3.OkHttpClient;/** * Created by Jason on 2017/4/18. */public class OKClient { private static OKClient instance; private OkHttpClient client; private OKClient(Context context) { //缓存文件最大限制大小20M client = new OkHttpClient.Builder() .readTimeout(15, TimeUnit.SECONDS) .cache(new Cache(context.getCacheDir(), 1024*1024*20)) .writeTimeout(15, TimeUnit.SECONDS)//设置写入超时时间 .readTimeout(15, TimeUnit.SECONDS)//设置读取数据超时时间 .retryOnConnectionFailure(false)//设置不进行连接失败重试 .build(); } private static synchronized void syncInit(Context context) { if (instance == null) { instance = new OKClient(context); } } public static OKClient getInstance(Context context) { if (instance == null) { syncInit(context); } return instance; } public OkHttpClient getClient() { return client; }}
请求工具类1:
package com.itant.zhuling.tool.net;import android.content.Context;import com.itant.zhuling.error.NetError;import java.io.IOException;import io.reactivex.Observable;import io.reactivex.ObservableEmitter;import io.reactivex.ObservableOnSubscribe;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * Created by Jason on 2017/4/18. */public class ObservableTool { /** * 发送get请求 * @param context * @param url * @return */ public static Observable<String> getGetObFromUrl(final Context context, final String url) { Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() { @Override //将事件发射出去,持有观察者的对象 public void subscribe(final ObservableEmitter<String> emitter) throws Exception { OkHttpClient client = OKClient.getInstance(context).getClient(); final Request request = new Request.Builder().url(url).get().build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); emitter.onError(new NetError()); } @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { //拿到结果的一瞬间触发事件,并传递数据给观察者 try { // 获取数据成功 String result = new String(response.body().bytes()); emitter.onNext(result); } catch (Exception e) { e.printStackTrace(); emitter.onError(new NetError()); } } else { emitter.onError(new NetError()); } } }); } }); return observable; }}
请求工具类2(让请求运行在子线程里):
package com.itant.zhuling.tool.net;import io.reactivex.Observable;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.schedulers.Schedulers;/** * 观察者装饰器 */public class ObservableDecorator { public static <T> Observable<T> decorate(Observable<T> observable) { Observable<T> newObservable = observable.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()); //.delay(2, TimeUnit.SECONDS, AndroidSchedulers.mainThread()); // FIXME 模拟延迟,用于观察加载框等效果 return newObservable; }}
真正使用:
ObservableDecorator.decorate(ObservableTool.getGetObFromUrl(mContext, BASE_URL_MEI_ZHI + page)).subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String result) { try { // 妹子获取成功 JSONObject jsonObject = new JSONObject(result); Gson gson = new GsonBuilder().create(); List<Meizhi> meizhis = gson.fromJson(jsonObject.getString("results"), new TypeToken<List<Meizhi>>(){}.getType()); mView.getMeizhiSuc(meizhis); } catch (Exception e) { e.printStackTrace(); mView.getMeizhiFail(e.toString()); } } @Override public void onError(Throwable e) { mView.getMeizhiFail(e.toString()); } @Override public void onComplete() { } });
0 0
- OKHttp使用之粗陋封装
- okhttp-utils的封装之okhttp的使用
- OKHTTP封装使用
- android okhttp封装使用
- okHttp简单封装使用
- OkHttp封装之后使用
- okhttp简单封装+使用
- 学习笔记之-----OkHttp之使用与简单封装
- android 之OkHttp封装模板
- Android OkHttp使用与封装
- OkHttp的使用和封装
- OkHttp简易封装和使用
- okHttp的简单封装使用
- okhttp简单封装及使用
- (4.2.36.2)HTTP之OkHttp(二): Okhttp的封装
- Android使用OkHttp实例,以及OkHttp方法封装
- Android使用OkHttp实例,以及OkHttp方法封装
- OkHttp 之 token使用
- 树状数组——BZOJ3192/Luogu3253 [JLOI2013]删除物品
- iOS开发 message sent to deallocated instance问题解决
- CentOS6 安装golang
- 排序算法的稳定性与不稳定性
- 数据结构(三):线性表的链式存储结构
- OKHttp使用之粗陋封装
- GCD的基本概念和使用
- 消息队列设计
- java文件普通复制和NIO复制
- MATLAB中ismember函数
- Dynamics CRM2016 Web API之查询单个属性字段的值
- LeetCode 14. Longest Common Prefix 找字符串数组最长相同前缀
- 如何通俗易懂地解释「协方差」与「相关系数」的概念?
- Spring--IoC--基于XML的DI-自动注入-byName