RxJava retryWhen操作符实现错误重试机制
来源:互联网 发布:linux 磁盘挂载出问题 编辑:程序博客网 时间:2024/04/28 23:56
业务需求
当我们在app里发起网络请求时,可能会因为各种问题导致失败。如何利用RxJava来实现出现错误后重试若干次,并且可以设定重试的时间间隔。
具体实现
网络请求使用Retrofit来做,请求用户信息接口
<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">GET("/userinfo?noToken=1")</span> Observable<Response> <span class="hljs-function" style="box-sizing: border-box; color: rgb(0, 102, 102);">getUserInfoNoToken()</span></span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
请求用户信息接口的逻辑代码
<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">userApi.getUserInfoNoToken() <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//总共重试3次,重试间隔3000毫秒</span> .retryWhen(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RetryWithDelay(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span>)) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Action1<Response>() { <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">call</span>(Response response) { String content = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> String(((TypedByteArray) response.getBody()).getBytes()); printLog(tvLogs, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>, content); } }, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Action1<Throwable>() { <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">call</span>(Throwable throwable) { throwable.printStackTrace(); } });</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>
RetryWithDelay代码:
<code class="hljs handlebars has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="xml" style="box-sizing: border-box;"><span class="php" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">RetryWithDelay</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">implements</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Func1</span><<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Observable</span><? <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Throwable</span>>, <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Observable</span><?></span></span>> { private final int maxRetries; private final int retryDelayMillis; private int retryCount; public RetryWithDelay(int maxRetries, int retryDelayMillis) { this.maxRetries = maxRetries; this.retryDelayMillis = retryDelayMillis; } @Override public Observable<span class="php" style="box-sizing: border-box;"><span class="hljs-class" style="box-sizing: border-box;"><?> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">call</span>(<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Observable</span><? <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Throwable</span>> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">attempts</span>) {</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> attempts .flatMap(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Func1<Throwable, Observable<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"><?</span>></span>>() { @Override public Observable<span class="php" style="box-sizing: border-box;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"><?</span>> call(Throwable throwable) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (++retryCount <= maxRetries) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// When this Observable calls onNext, the original Observable will be retried (i.e. re-subscribed).</span> printLog(tvLogs, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"get error, it will try after "</span> + retryDelayMillis + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" millisecond, retry count "</span> + retryCount); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> Observable.timer(retryDelayMillis, TimeUnit.MILLISECONDS); } <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Max retries hit. Just pass the error along.</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> Observable.error(throwable); } }); } }</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul>
如何模拟重试呢?
方法一:把服务器关闭,关闭服务器后,客户端请求接口的必然会报错,看看是不是重试三次。
运行输出:
<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
上面是重试三次了,但是我们怎么知道,如果在服务器启动后,在接下的重试中请求成功呢?接下来试试方法二。
方法二:先把服务器关闭,当点击按钮请求的同时,启动Tomcat服务器。
运行输出:
<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'username:chiclaim,age:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">007</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">true</span>, Thread Name:main</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
可以发现,在第三次重试的时候,服务器可用了。
转自:http://blog.csdn.net/johnny901114/article/details/51539708
0 0
- RxJava(六) retryWhen操作符实现错误重试机制
- RxJava retryWhen操作符实现错误重试机制
- RxJava retryWhen操作符实现错误重试机制
- RxJava操作符repeatWhen()和retryWhen()
- Rxjava操作符(defer,compose,retryWhen)
- RxJava操作符repeatWhen()和retryWhen()
- 使用RxJava的retryWhen操作符实现token过期自动刷新
- 对RxJava中.repeatWhen()和.retryWhen()操作符的思考
- Retrofit+Rxjava服务器IP轮询重试机制实现
- 有关RXjava retryWhen
- RX操作符之错误处理(catch[onErrorReturn、onErrorResumeNext、onExceptionResumeNext]、retry、retryWhen)
- RxJava----操作符:错误处理
- RxJava操作符(5)-错误
- [200分贴]RxJava怎么实现多个线程同时执行,怎么实现retryWhen
- [200分贴]RxJava怎么实现多个线程同时执行,怎么实现retryWhen
- Volley框架的错误重试机制分析
- RxJava操作符(06-错误处理)
- java调度器(重试机制)实现
- RMQ之ST算法
- 第六讲:类、对象的简单应用及类封装、隐蔽性
- 数据连接池的工作原理
- ServletContextListener定时任务的使用
- RabbitMQ入门教程 For Java【2】 - Work Queues
- RxJava retryWhen操作符实现错误重试机制
- ***.obj :error LNK2001: 无法解析的外部符号
- hdu5751Eades
- Linux进程通信——管道
- Android MD5加密法
- 【C++】C++顺序栈实现的计算器
- UVA 12657 Boxes in a Line(双向链表)
- RxJava concat符操作处理多数据源
- Activity入门--“生命周期”,启动模式,Intent跳转Flag方式