如何用okgo get请求在请求失败后继续请求,并设置定时请求

okhttp-OkGo Project Url:
Introduction: OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用。该库是封装了 okhttp 的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持 Https 和自签名证书,支持 cookie 的持久化和自动管理,支持四种缓存模式缓存网络数据,支持 301 和 302 重定向,扩展了统一的上传管理和下载管理功能 More: &&&&&& Tags:
工程结构全新优化支持 RxJava支持 RxJava2支持自定义缓存策略支持下载管理支持上传管理
该库部分思想借鉴了以下项目:
在此特别感谢上述作者,喜欢原作的可以去使用原项目。同时欢迎大家下载体验本项目,如果使用过程中遇到什么问题,欢迎反馈。
本项目中使用的图片选择是我的另一个开源项目
完全仿微信的图片选择库,自带矩形图片裁剪和圆形图片裁剪功能,有需要的可以去下载使用。附上地址:
本项目中的九宫格控件也是我的开源项目
类似 QQ 空间,微信朋友圈,微博主页等,展示图片的九宫格控件,自动根据图片的数量确定图片大小和控件大小,使用 Adapter 模式设置图片,对外提供接口回调,使用接口加载图片,支持任意的图片加载框架如:Glide、ImageLoader、xUtils3、Picasso 等,支持点击图片全屏预览大图。附上地址:
(点击图标,可以直接加入,建议使用 QQ 群,邮箱使用较少,可能看的不及时)
如果遇到问题欢迎在群里提问,个人能力也有限,希望一起学习一起进步。
[v3.1.x]版本
计划分离 params 参数的具体作用,分为 paramsPath,paramsQuery 和 params,支持 url 路径动态替换
计划支持请求优先级,方便有些重要请求优先进行
计划支持自定义线程池,使用自己的线程池管理网络请求
[v3.2.x]版本
计划增加扩展库 OkAnno,作用是让 okgo 支持注解方式请求,具体写法与 Retrofit 相似,但是更简单方便,也更强大,方便 Retrofit 用户平滑过渡到 OkGo
其他功能暂时还没想出来,大家有想法的可以积极加群讨论,或者直接在 issue 里面提出你的想法,我会第一时间回复。
Android Studio 用户
一般来说,只需要添加第一个 okgo 的核心包即可,其余的三个库根据自己的需要选择添加!!!
//必须使用
compile 'com.lzy.net:okgo:3.0.4'
//以下三个选择添加,okrx 和 okrx2 不能同时使用
compile 'com.lzy.net:okrx:1.0.2'
compile 'com.lzy.net:okrx2:2.0.2'
compile 'com.lzy.net:okserver:2.0.5'
Eclipse 的用户(赶紧换 AS 吧),可以选择添加本项目根目录中 /jar 目录下的 jar 包:
一般来说,至少需要 okhttp、okio、okgo 三个 jar 包,其余的三个扩展 jar 包根据自己的需要选择添加!!!
以下三个选择添加,okrx 和 okrx2 不能同时使用
该项目的文档全部以 Wiki 的形式展示,wiki 文档永远与最新版本的库保持同步,如果你发现文档的说明与你的写法不一样,那么请升级到最新版本,重要的事情说三遍
如果你实在不愿意升级到 3.x 版本,,注意:老版本库的问题将不在维护,所有 bug 会在最新版本修复,所以建议跟随最新版本的库。
如果遇到使用问题,解决办法如下:
看上述文档中是否有相关描述
看别人提的 issues 是否有你的问题,这里面有很多人的提问,。
如果你感觉是 bug,或者有疑问,也欢迎在 issues 里面提问,我每天都会认真解答,。
还有疑问,加入联系方式中的 QQ 群,大家一起讨论。
如果你不想编译项目,提供了 apk 供直接运行,方便查看效果,点击图标下载:
本项目 Demo 使用的是我自己的服务器,有时候可能不稳定,网速比较慢时请耐心等待,尴尬呀。。
如果你想查看历史版本信息,请点击图标:
如果你使用遇到了问题,首先请看控制台 log,如果 log 无法看出问题,无法确定是该库的 bug 还是服务端的问题,建议抓包查看网络数据,
如果你觉得好,对你有过帮助,请给我一点打赏鼓励吧,一分也是爱呀!
okgo, okrx, okrx2, okserver 所有代码均可以混淆,但是由于底层使用的是 okhttp,它不能混淆,所以只需要添加以下混淆代码就可以了
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
-dontwarn okio.**
-keep class okio.**{*;}
当然如果你确实不需要混淆 okgo 的代码,可以继续添加以下代码
-dontwarn com.lzy.okgo.**
-keep class com.lzy.okgo.**{*;}
-dontwarn com.lzy.okrx.**
-keep class com.lzy.okrx.**{*;}
-dontwarn com.lzy.okrx2.**
-keep class com.lzy.okrx2.**{*;}
-dontwarn com.lzy.okserver.**
-keep class com.lzy.okserver.**{*;}
Copyright 2016 jeasonlzy(廖子尧)
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
loading Support MePaypal:
About MeGoogle+: GitHub: Blog:OkRx扩展,让OkGo完美结合RxJava,比Retrofit更简单易用 - 简书
OkRx扩展,让OkGo完美结合RxJava,比Retrofit更简单易用
OkGo - Rx扩展,可以方便的和RxJava联用,如果你熟悉Retrofit,那么这个框架和Retrofit使用方式很像。
以下是该项目相关文章的传送门:
OkGo主项目详细使用方法:
OkGo2.0版本以前的前身OkHttpUtils介绍:
项目Github开源地址:
联系方式:QQ群()
如果你想直接运行apk看效果,点击这里下载:
如何选择网络框架
说了这么多功能,我们来看看为什么要使用OkGo这个框架。
首先目前主流的几个网络框架
android-async-http
在此引用知乎上Stay Zhang的回答:
我们来先说一个常识性的错误:volley, retrofit, android-async-http 帮你封装了具体的请求,线程切换以及数据转换。而OkHttp 是基于http协议封装的一套请求客户端,虽然它也可以开线程,但根本上它更偏向真正的请求,跟HttpClient, HttpUrlConnection的职责是一样的。
所以不要混淆。
-----以下纯个人主观见解
首先,我想即使你单纯使用OkHttp,还是会再包一层的,这样就等价于Volley之流的框架,只是封装的好与坏而已。
android-async-http内部实现是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系统自带的了,不过它在最近的更新中将HttpClient的所有代码copy了一份进来,所以还能使用。
Volley是官方出的,volley在设计的时候是将具体的请求客户端做了下封装:HurlStack,也就是说可以支持HttpUrlConnection, HttpClient, OkHttp,相当于模版模式吧,这样解耦还是非常方便的,可以随意切换,如果你之前使用过Volley,并习惯使用,那直接写个OkHttp扩展就行了。
Retrofit因为也是square出的,所以大家可能对它更崇拜些。Retrofit的跟Volley是一个套路,但解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方说json, protobuff, xml, moshi等等。然而目前OkGo已经完全可以替代Retrofit,同样支持RxJava,但具有更强的灵活性和易用性。
OkGo的优势
优势一:性能高,专注于简单易用的网络请求,使用主流的okhttp进行封装,对于okhttp大家都知道,在Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了,并且支持HTTP2/SPDY黑科技,支持socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,拥有队列线程池,轻松写并发。
优势二:特有的网络缓存模式,是大多数网络框架所不具备的,说一个应用场景,老板说我们的app不仅需要在有网的情况下展示最新的网络数据,还要在没网的情况下使用缓存数据,这时候是不是项目中出现了大量的代码判断当前网络状况,根据不同的状态保存不同的数据,然后决定是否使用缓存。细想一下,这是个通用的写法,于是OkGo提供了五种缓存模式,让你不用关心缓存的实现,而专注于数据的处理。(具体缓存的使用方法请看最后第四章节)。
优势三:方便易用的扩展接口,可以添加全局的公共参数,全局拦截器,全局超时时间,更可以对单个请求定制拦截器,超时时间,请求参数修改等等,在使用上更是方便,原生支持的链式调用让你的请求更加清晰。
优势四:强大的Cookie保持策略,我们知道在客户端对cookie的获取是个不太简单的事情,特别是还要处理cookie的过期时间,持久化策略等等,OkGo帮你彻底解决Cookie的难题,默认拥有内存存储和持久化存储两种实现,cookie全程自动管理,并且提供了额外的addCookie方式,允许介入到自动管理的过程中,添加你想创建的任何cookie。
所以就说这么多啦,选最适合项目的,选大多数人选择的,选简单易用的,选择使用流行技术的,就这么个标准,而OkGo正是在这种情况下诞生啦!!
OkRx目前支持
完美结合RxJava
比Retrofit更简单方便
网络请求和RxJava调用,一条链点到底
支持Json数据的自动解析转换
OkGo包含的所有请求功能,OkRx全部支持
目前使用的RxJava版本如下
compile 'io.reactivex:rxjava:1.2.0'
compile 'io.reactivex:rxandroid:1.2.1'
0.最开始的配置
OkRx 是 OkGo 的扩展,所以要想使用OkRx,那么请先按照OkGo的配置文档,做相应的初始化。
1.在gradle中添加一行依赖
compile 'com.lzy.net:okrx:0.1.0'
compile 'com.lzy.net:okrx:+'
//使用+,引用最新版
2.调用请求代码
我们还是像正常使用OkGo的方式一样,传入我们需要请求的Url,和我们需要的参数,那么最关键的一行就是最后调用getCall()这个方法。
这里传入的两个参数进行一下说明:
第一个参数是Convert对象,表示需要将服务器返回的数据流解析成什么对象,这里我们先用最简单的String做转换,StringConvert对象也是库中内置的转换器。
第二个参数是Adapter对象,表示需要将解析的结果用什么对象包装,该参数可以省略不写,那么默认是Call&T&这个对象包装,当然,我们要使用Rx的调用,使用这个肯定是不行的,所以我们传入OkRx扩展的RxAdapter对象,他是使用的Observable&T&对象包装的,同样他需要一个泛型,该泛型必须和Convert的泛型一致,否则就发生了类型转换异常。
以上两个参数具体的注意事项我们后续详细再说。
Observable&String& call = OkGo.post(Urls.URL_METHOD)//
.headers("aaa", "111")//
.params("bbb", "222")//
.getCall(StringConvert.create(), RxAdapter.&String&create());
3.调用Rx转换代码
现在我们已经获取了Observable对象了,熟悉RxJava的你难道还不会使用了吗,以下是简单的在请求前弹出loading,结束后展示信息的代码。
call.doOnSubscribe(new Action0() {
public void call() {
showLoading();
//开始请求前显示对话框
.observeOn(AndroidSchedulers.mainThread())//切换到主线程
.subscribe(new Action1&String&() {
public void call(String s) {
dismissLoading();
//请求成功,关闭对话框
handleResponse(s, null, null);
}, new Action1&Throwable&() {
public void call(Throwable throwable) {
throwable.printStackTrace();
dismissLoading();
//请求失败
showToast("请求失败");
handleError(null, null);
4.代码整合
上面的调用是不是很简单,有人可能觉得链试代码太长,没关系,我们完全可以像Retrofit一样,自己写一个ServerApi类,这里面管理了所有的接口请求和参数,只是OkGo并不是采用的注解和反射实现的,而是通过传参来实现,相信对你你来讲,这样的方式更加直观。我们再将调用配合上lambda表达式,那么最后的结果是这样的:
这样的请求方式有没有惊艳到你!!
OkGo.post(Urls.URL_METHOD)//
.headers("aaa", "111")//
.params("bbb", "222")//
.getCall(StringConvert.create(), RxAdapter.&String&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方法,就是你想要的。
getCall(StringConvert.create(), RxAdapter.&String&create())
如果你想请求Bitmap,那么将第2步中的getCall方法,改成如下形式
getCall(BitmapConvert.create(), RxAdapter.&Bitmap&create())
如果你想下载File,那么还是修改这行
getCall(new FileConvert(), RxAdapter.&File&create())
如果你想直接解析Json对象,聪明的你一定知道还是这行。注意看Convert最后有个大括号,千万不能忘记
getCall(new JsonConvert&ServerModel&() {}, RxAdapter.&ServerModel&create())
如果你想直接解析List&Bean&对象,也很简单。注意看Convert最后有个大括号,千万不能忘记
getCall(new JsonConvert&List&ServerModel&&() {}, RxAdapter.&List&ServerModel&&create())
我想,对于一款普通的app,这些请求一定能满足你90%以上的需求,而且使用方便,只需要改一行代码,就能直接获取到你想要的数据。
6.取消请求
推荐对每一个网络请求的Subscription对象都交由统一的CompositeSubscription去管理,在界面销毁或者需要取消的地方调用。
例如:在Activity中,当Activity销毁取消请求,可以在onDestory里面统一取消。
protected void onDestroy() {
super.onDestroy();
unSubscribe();
三、自定义Convert使用
目前内部提供的包含Converter, StringConvert ,BitmapConvert ,FileConvert ,可以根据自己的需求去自定义Convert
Converter: 接口,所有转换器必须实现
StringConvert:将网络结果解析转成String
BitmapConvert:将网络结果解析转成Bitmap
FileConvert:将网络结果解析转成File
对于自定义的JsonConvert,由于不同的业务实现都不一样,所以并不放在库中,提供参考实现供自己修改
如果你觉得好或者给你带来了方便,请打赏一下给作者买杯咖啡喝吧。
欢迎访问我的github地址:https://github.com/jeasonlzy?tab=repositories
OkGo - OkHttpUtils-2.0.0升级后改名 OkGo,全新完美支持RxJava 项目地址:https://github.com/jeasonlzy,欢迎star,欢迎issue 该库是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofi...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
前言 在Android开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将手把手带你深入剖析Retrofit v2.0的源码,希望你们会喜欢 请尽量在PC端而不要在移动端看,否则图片可能看不清。在阅读本文前,建议先...
Retrofit是squareup公司的开源力作,和同属squareup公司开源的OkHttp,一个负责网络调度,一个负责网络执行,为Android开发者提供了即方便又高效的网络访问框架。 不过,对于Retrofit这样设计精妙、代码简洁、使用方便的优秀开源项目,不能仅知道...
经济学人:经济改革好评如潮? 奥朗德被同僚暗讽软弱无能 想听音频点击这里外刊赏读 “Vive la France!” read one home- “Merci Papa Hollande!” declared another. The spont...
我们到拉萨过年已经两天了,可想有个客栈做饭的愿望却不能如愿,一直住在酒店,无法煮饭,只能去外面吃,可外面太贵了,所以妈妈和苏妈妈到处寻找,终于如愿以偿,找到了一个像家一样美好的客栈。而今天我们就要换去这个可以自己做饭的、美好的客栈。
刚把行李放好,走进客栈。一只土黄...
纷纷扬扬的雪花宛如仙子一般从天而降,空气湿润了,天空也似乎明亮了许多。何晴偷眼看和她并肩前行的郝建,心里涌上一股暖流。
雪越下越大,郝建身上的呢子短大衣的前襟沾满了雪花,风朝着他们行走的方向,郝建说,“还是赶快骑上车子走,要不然等会路就滑了。”说完,跨上自行...
和大家聊一聊七层流量接入中间件。 1. 接入系统简介与架构 1.1 Go反向代理 用Go语言实现一个订制化的反向代理。 Go语言 近几年在国内较流行,随着docker的成名而愈加受人追捧。目前国内使用Go开发的团队和系统越来越多,像百度的BFE、360的长连接推送、七牛云存...&>&网络框架OkGo使用
网络框架OkGo使用
上传大小:22.16MB
以前一直使用自己封装的okhttp,感觉太麻烦了,再后来使用鸿洋大神的okhttputils,现在试试okgo,接下来应该是用retrofit了
综合评分:0(0位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
网络框架OkGo使用
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
网络框架OkGo使用他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 android okgo并发请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信