diff --git a/README.md b/README.md index 1abf4148..36c66c8f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - ![image](https://github.com/jeasonlzy/Screenshots/blob/master/okgo/logo3.png) + ![image](https://github.com/jeasonlzy/Screenshots/blob/master/okgo/logo4.jpg) # OkGo -### 封装了okhttp的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持Https和自签名证书,支持cookie自动管理,支持四种缓存模式缓存网络数据,支持301、302重定向,扩展了统一的上传管理和下载管理功能 +### OkHttpUtils2.0升级后改名OKGo, 封装了okhttp的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持Https和自签名证书,支持cookie自动管理,支持四种缓存模式缓存网络数据,支持301、302重定向,扩展了统一的上传管理和下载管理功能 该项目参考了以下项目: @@ -33,25 +33,27 @@ 对于Eclipse不能运行项目的,提供了apk供直接运行 -### 或者点击下载Demo [okgo_v1.8.1.apk](https://github.com/jeasonlzy/OkGo/blob/master/okgo_v1.8.1.apk?raw=true)。 +### 或者点击下载Demo [okgo_v2.0.0.apk](https://github.com/jeasonlzy/OkGo/blob/master/okgo_v2.0.0.apk?raw=true)。 本项目Demo的网络请求是我自己的服务器,有时候可能不稳定,网速比较慢时请耐心等待。。 * 对于Android Studio的用户,可以选择添加: ```java - compile 'com.lzy.net:okgo:1.8.1' //可以单独使用,不需要依赖下方的扩展包 - compile 'com.lzy.net:okserver:1.0.3' //扩展了下载管理和上传管理,根据需要添加 + compile 'com.lzy.net:okgo:2.0.0' //可以单独使用,不需要依赖下方的扩展包 + compile 'com.lzy.net:okrx:0.1.0' //RxJava扩展支持 + compile 'com.lzy.net:okserver:1.1.0' //扩展了下载管理和上传管理,根据需要添加 或者 - compile 'com.lzy.net:okgo:+' //版本号使用 + 可以自动引用最新版 - compile 'com.lzy.net:okserver:+' //版本号使用 + 可以自动引用最新版 + compile 'com.lzy.net:okgo:+' //版本号使用 + 可以自动引用最新版 + compile 'com.lzy.net:okrx:+' //版本号使用 + 可以自动引用最新版 + compile 'com.lzy.net:okserver:+' //版本号使用 + 可以自动引用最新版 ``` * 对于Eclipse的用户,可以选择添加 `/jar` 目录下的: ```java - okgo-1.8.1.jar - okserver-1.0.3.jar + okgo-2.0.0.jar + okserver-1.1.0.jar ``` * 如果是以jar包的形式引入`okserver`,需要在清单文件中额外注册一个服务 ```java @@ -84,9 +86,16 @@ * 支持根据Tag取消请求 * 支持自定义泛型Callback,自动根据泛型返回对象 -## 4.OkServer 扩展功能 +## 4.OkRx扩功能,详细使用方法点击这里:[OkRx使用文档](https://github.com/jeasonlzy/OkHttpUtils/blob/master/README_RX.md) +* 完美结合RxJava +* 比Retrofit更简单方便 +* 网络请求和RxJava调用,一条链点到底 +* 支持Json数据的自动解析转换 +* OkGo包含的所有请求功能,OkRx全部支持 -### 4.1 统一的文件下载管理(DownloadManager): +## 5.OkServer 扩展功能 + +### 5.1 统一的文件下载管理(DownloadManager): * 结合OkGo的request进行网络请求,支持与OkGo保持相同的全局公共参数,同时支持请求传递参数 * 支持断点下载,支持突然断网,强杀进程后,断点依然有效 * 支持 下载 暂停 等待 停止 出错 完成 六种下载状态 @@ -96,7 +105,7 @@ * 下载文件名可以自己定义,也可以不传,框架自动解析响应头或者url地址获得文件名,如果都没获取到,使用default作为文件名 * 下载管理使用了服务提高线程优先级,避免后台下载时被系统回收 -### 4.2 统一的文件上传管理(UploadManager) +### 5.2 统一的文件上传管理(UploadManager) * 结合OkGo的request进行网络请求,支持与OkGo保持相同的全局公共参数,同时支持请求传递参数 * 上传只能使用`Post`, `Put`, `Delete`, `Options` 这四种请求,不支持`Get`, `Head` * 该上传管理为简单管理,不支持断点续传或分片上传,只是简单的将所有上传任务使用线程池进行了统一管理 diff --git a/README_RX.md b/README_RX.md new file mode 100644 index 00000000..2a4a7ec0 --- /dev/null +++ b/README_RX.md @@ -0,0 +1,141 @@ + ![image](https://github.com/jeasonlzy/Screenshots/blob/master/okgo/logo3.png) + +# OkGo + +### Rx扩展,可以方便的和`RxJava`联用,如果你熟悉`Retrofit`,那么这个框架和`Retrofit`使用方式很像 + +## 联系方式 + * 邮箱地址: liaojeason@126.com + * QQ群: 489873144 (建议使用QQ群,邮箱使用较少,可能看的不及时) + * 本群旨在为使用我的github项目的人提供方便,如果遇到问题欢迎在群里提问。个人能力也有限,希望一起学习一起进步。 + +## OkRx目前支持 +* 完美结合RxJava +* 比Retrofit更简单方便 +* 网络请求和RxJava调用,一条链点到底 +* 支持Json数据的自动解析转换 +* OkGo包含的所有请求功能,OkRx全部支持 + +## 一.用法 +### 0.最开始的配置 + `OkRx` 是 `OkGo` 的扩展,所以要想使用OkRx,那么请先按照OkGo的配置文档,做相应的初始化。 + +### 1.在gradle中添加一行依赖 +```java + compile 'com.lzy.net:okrx:0.1.0' //Rx扩展 + + 或者 + + compile 'com.lzy.net:okrx:+' //使用+,引用最新版 +``` + +### 2.调用请求代码 + 我们还是像正常使用OkGo的方式一样,传入我们需要请求的Url,和我们需要的参数,那么最关键的一行就是最后调用`getCall()`这个方法。 + 这里传入的两个参数进行一下说明: + 第一个参数是`Convert`对象,表示需要将服务器返回的数据流解析成什么对象,这里我们先用最简单的`String`做转换,`StringConvert`对象也是库中内置的转换器。 + 第二个参数是`Adapter`对象,表示需要将解析的结果用什么对象包装,该参数可以省略不写,那么默认是`Call`这个对象包装,当然,我们要使用Rx的调用,使用这个肯定是不行的,所以我们传入OkRx扩展的`RxAdapter`对象,同样他需要一个泛型,该泛型必须和`Convert`的泛型一致,否则就发生了类型转换异常。 + 以上两个参数具体的注意事项我们后续详细再说。 +```java + Observable call = OkGo.post(Urls.URL_METHOD)// + .headers("aaa", "111")// + .params("bbb", "222")// + .getCall(StringConvert.create(), RxAdapter.create()); +``` + +### 3.调用Rx转换代码 + 现在我们已经获取了`Observable`对象了,熟悉Rxjava的你难道还不会使用了吗,以下是简单的在请求前弹出loading,结束后展示信息的代码。 +```java + call.doOnSubscribe(new Action0() { + @Override + public void call() { + showLoading(); //开始请求前显示对话框 + } + })// + .observeOn(AndroidSchedulers.mainThread())//切换到主线程 + .subscribe(new Action1() { + @Override + public void call(String s) { + dismissLoading(); //请求成功,关闭对话框 + handleResponse(s, null, null); + } + }, new Action1() { + @Override + public void call(Throwable throwable) { + throwable.printStackTrace(); + dismissLoading(); //请求失败 + showToast("请求失败"); + handleError(null, null); + } + }); +``` + + ### 4.代码整合 + 上面的调用是不是很简单,有人可能觉得链试代码太长,没关系,我们完全可以像Retrofit一样,自己写一个`ServerApi`类,这里面管理了所有的接口请求和参数,只是OkGo并不是采用的注解和反射实现的,而是通过传参来实现,相信对你你来讲,这样的方式更加直观。我们再将调用配合上`lambda`表达式,那么最后的结果是这样的: + 这样的请求方式有没有惊艳到你!! +```java + OkGo.post(Urls.URL_METHOD)// + .headers("aaa", "111")// + .params("bbb", "222")// + .getCall(StringConvert.create(), RxAdapter.create())//以上为产生请求事件,请求默认发生在IO线程 + .doOnSubscribe(() -> { + showLoading(); //开始请求前显示对话框 + }) + .observeOn(AndroidSchedulers.mainThread())//切换到主线程 + .subscribe(s -> { + dismissLoading(); //请求成功,关闭对话框 + handleResponse(s, null, null); + }, throwable -> { + throwable.printStackTrace(); + dismissLoading(); //请求失败 + showToast("请求失败"); + handleError(null, null); + }); +``` + + ### 5。其他请求 + +* 如果你想请求`String`,那么将第`2`步中的`getCall`方法,就是你想要的。 +```java + getCall(StringConvert.create(), RxAdapter.create()) +``` + * 如果你想请求`Bitmap`,那么将第`2`步中的`getCall`方法,改成如下形式 +```java + getCall(BitmapConvert.create(), RxAdapter.create()) + ``` + * 如果你想下载`File`,那么还是修改这行 +```java + getCall(new FileConvert(), RxAdapter.create()) +``` + * 如果你想直接解析`Json`对象,聪明的你一定知道还是这行。`注意看Convert最后有个大括号,千万不能忘记` +```java + getCall(new JsonConvert() {}, RxAdapter.create()) +``` + * 如果你想直接解析`List`对象,也很简单。`注意看Convert最后有个大括号,千万不能忘记` +```java + getCall(new JsonConvert>() {}, RxAdapter.>create()) +``` + +我想,对于一款普通的app,这些请求一定能满足你90%以上的需求,而且使用方便,只需要改一行代码,就能直接获取到你想要的数据。 + +### 6.取消请求 +推荐对每一个网络请求的`Subscription`对象都交由统一的`CompositeSubscription`去管理,在界面销毁或者需要取消的地方调用。 +例如:在Activity中,当Activity销毁取消请求,可以在onDestory里面统一取消。 +```java + @Override + protected void onDestroy() { + super.onDestroy(); + + unSubscribe(); + } +``` + +## 三、自定义Convert使用 + +目前内部提供的包含`Converter`, `StringConvert` ,`BitmapConvert` ,`FileConvert` ,可以根据自己的需求去自定义Convert + + * `Converter`: 接口,所有转换器必须实现 + * `StringConvert`:将网络结果解析转成`String` + * `BitmapConvert`:将网络结果解析转成`Bitmap` + * `FileConvert`:将网络结果解析转成`File` + +###对于自定义的`JsonConvert`,由于不同的业务实现都不一样,所以并不放在库中,提供参考实现供自己修改 diff --git a/jar/okgo-2.0.0.jar b/jar/okgo-2.0.0.jar new file mode 100644 index 00000000..7d26c324 Binary files /dev/null and b/jar/okgo-2.0.0.jar differ diff --git a/jar/okhttpserver-1.0.3.jar b/jar/okhttpserver-1.0.3.jar deleted file mode 100644 index 7c7c509d..00000000 Binary files a/jar/okhttpserver-1.0.3.jar and /dev/null differ diff --git a/jar/okhttputils-1.8.1.jar b/jar/okhttputils-1.8.1.jar deleted file mode 100644 index 5635597d..00000000 Binary files a/jar/okhttputils-1.8.1.jar and /dev/null differ diff --git a/okgo_v2.0.0.apk b/okgo_v2.0.0.apk new file mode 100644 index 00000000..33404c67 Binary files /dev/null and b/okgo_v2.0.0.apk differ diff --git a/okhttputils_v1.8.1.apk b/okhttputils_v1.8.1.apk deleted file mode 100644 index ed62b8bd..00000000 Binary files a/okhttputils_v1.8.1.apk and /dev/null differ