RxJava + Retrofit完成网络请求

时间:2022-09-12 09:17:40

1、前言

本文基于RxJava、Retrofit的使用,若是对RxJava或Retrofit还不了解的简友可以先了解RxJava、Retrofit的用法再来看这篇文章。

在这片文章之前分别单独介绍过Rxjava以及Retrofit的使用:

2、使用

在了解了RxJava和Retrofit分别的用法后,RxJava、Retrofit的搭配使用也就不再话下了。

先看看使用Retrofit完成一次网络请求是怎样:

2.1 单独使用Retrofit

1、先写一个service

  interface MyService {
@GET("user/login" )
Call<UserInfo> login(
@Query("username") String username,
@Query("password") String password
);
}

2、获取Call执行网络请求

RxJava + Retrofit完成网络请求

以上是Retrofit单独使用时的做法。

那Retrofit与RxJava结合是怎样使用的?下面就来说说这篇文章的重点。

2.2 RxJava+Retrofit完成网络请求

1、添加依赖。前四个分别是RxJava、RxAndroid、Retrofit以及Gson的库,最后那个才是新加入的,RxJava + Retrofit的使用需要用到最后那个包。

compile 'io.reactivex:rxjava:x.y.z'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

注意:最后三个包的版本号必须一样,这里用的是2.0.2。

2、写一个service包含登录方法

RxJava + Retrofit完成网络请求

相比之前的service,这里login方法的返回值是Observable类型。

Observable...是不是觉得很熟悉,这货不就是之前在RxJava使用到的被监听者?

3、使用Observable完成一个网络请求,登录成功后保存数据到本地。

RxJava + Retrofit完成网络请求

RxJava + Retrofit 形式的时候,Retrofit 把请求封装进 Observable ,在请求结束后调用 onNext() 或在请求失败后调用 onError()。

可以看到,调用了service的login方法后得到Observable对象,在新的线程中执行网络请求,请求成功后切换到io线程执行保存用户信息的动作,最后再切换到主线程执行请求失败onError()、请求成功onNext()。

整体的逻辑十分清晰都在一条链中,就算还有别的要求还可以往里面添加,丝毫不影响代码的简洁。

(终于举了一个有实际意义的例子)。

注意:retrofit的初始化加了一行代码

addCallAdapterFactory(RxJavaCallAdapterFactory.create())

3、RxJava + Retrofit 进阶

在上面举到登录后保存用户信息的例子,其实在做项目的时候,往往在登录后得到的并不是用户信息。一般登录后会得到token,然后根据token去获取用户的信息。他们的步骤是这样的:

  • 1、登录

  • 2、获取用户信息(前提:登录成功)

可以看得出来,这是一个嵌套的结构...嵌套啊!!!天呐,最怕嵌套的结构了。

使用RxJava + Retrofit来完成这样的请求

(借用抛物线的例子 http://gank.io/post/560e15be2dca930e00da1083 ,

稍微做了点改动)

接口方法:

RxJava + Retrofit完成网络请求

调用login方法:

RxJava + Retrofit完成网络请求

通过一个flatMap()轻松完成一次嵌套的请求,而且逻辑十分清晰。so easy~~~

4、小结

RxJava的实用性从上面的两个例子慢慢体现了出来,逻辑越是复杂,RxJava的优势就越明显。RxJava的使用就暂时介绍到这里吧,使用过程中遇到好用的再出来跟大家分享。

RxJava + Retrofit完成网络请求的更多相关文章

  1. RxJava&plus;Retrofit实现网络请求

    RxJava+Retrofit实现网络请求: 首先要添加依赖 compile 'io.reactivex:rxjava:x.y.z' compile 'io.reactivex:rxandroid:1 ...

  2. rxjava 调用retrofit执行网络请求的过程

    retrofit流程图 -1.RxJava调用Retrofit,从requestGtPushSaeUserInfo()中获得被观察者observable,然后new一个观察者向它订阅   0.从业务中 ...

  3. kotlin for android----------MVP模式下(OKHttp和 Retrofit&plus;RxJava)网络请求的两种实现方式

    今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...

  4. Android 网络请求Retrofit &plus; RxJava

    一.背景 经常看到项目用Retrofit+RxJava+RxAndroid的框架,为了看懂项目的结构.现在来了解一下,Retrofit: Retrofit是Square 公司开发的一款正对Androi ...

  5. RxJava&plus;Retrofit&plus;OkHttp,一步一步封装网络框架;

    使用RxJava+Retrofit+OkHttp,首先在build.gradle添加: compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com ...

  6. Retrofit网络请求库应用01

    PS:什么是Retrofit? 在官方文档中有这样一句话--A type-safe HTTP client for Android and Java(一个类型安全的http client库),具体的话 ...

  7. 一个App带你学会Retrofit2&period;0,麻麻再也不用担心我的网络请求了!

    Retrofit.Retrofit.Retrofit,越来越多的人在玩这个网络请求框架,这个由squareup公司开源的网络请求框架确实挺好用,今天我们就来看一下这个东东怎么玩! Retrofit作为 ...

  8. Android okHttp网络请求之Retrofit&plus;Okhttp&plus;RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  9. 基于Retrofit&plus;RxJava的Android分层网络请求框架

    目前已经有不少Android客户端在使用Retrofit+RxJava实现网络请求了,相比于xUtils,Volley等网络访问框架,其具有网络访问效率高(基于OkHttp).内存占用少.代码量小以及 ...

随机推荐

  1. 游戏启示录 关于Update的相关问题

    游戏启示录 关于Update的相关问题 这里说的Update是指的游戏的主循环.一般情况下.为了程序的方便控制我们一般只会有一个主循环.所有的游戏逻辑都会在这一个循环中完成.(额,其实这么做有点浪费. ...

  2. HelloWorld Makefile Template

    DEPDIR = build_dep TARGET_NAME = helloworld CFLAGS = -Wall SRCS = main.c SRCS += foo.c OBJS = $(SRCS ...

  3. IDA 在string窗口中显示中文字符串

    打开ida61\cfg中的ida.cfg文件找到 // (cp866 version)AsciiStringChars = "\r\n\a\v\b\t\x1B" " !\ ...

  4. JS 变量提升

    var a = 1; function foo() { console.log(a); var a = 2; } foo(); //undefined 根据变量提升机制,最后得出undefined; ...

  5. JSP include HTML出现乱码

    解决方法:在项目的web.xml中加入下面语句:<jsp-config>     <jsp-property-group>     <description>    ...

  6. SpringMVC实现账号只能在一处登陆

    一.问题引导 在Web开发中,实现一个账号只能在一处登陆有两种形式:1.当某个账号在某处登陆后,如果再在其他处登陆,将前一个账号挤掉:2.当某个账号登陆后,此账号在其他设备登陆提示已经登陆,无法登陆. ...

  7. C&num; 无法将类型为&OpenCurlyDoubleQuote;&lowbar;&lowbar;DynamicallyInvokableAttribute”的对象强制转换为类型&period;&period;&period;

    错误代码: //遍历方法特性 foreach (MethodInfo m in type.GetMethods()) { foreach(Attribute a in m.GetCustomAttri ...

  8. 设置网站默认用IE7打开

    head中加入以下内容 <meta http-equiv="X-UA-Compatible" content="IE=7" />

  9. oracle 闪回功能详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  10. mybatis源码阅读(动态代理)

    这一篇文章主要是记录Mybatis的动态代理学习成果,如果对源码感兴趣,可以看一下上篇文章  https://www.cnblogs.com/ChoviWu/p/10118051.html 阅读本篇的 ...