前几天分别对Retrofit和RxJava进行了总结,这个帖子打算把Retrofit结合RxJava使用的方法总结以下。有还不了解Retrofit或RxJava的朋友可以参考下面的帖子学习~

【Android - 框架】之Retrofit的使用

【Android - 框架】之RxJava的使用

首先导入依赖:

  1. dependencies {
  2. compile fileTree(include: ['*.jar'], dir: 'libs')
  3. androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
  4. exclude group: 'com.android.support', module: 'support-annotations'
  5. })
  6. compile 'com.android.support:appcompat-v7:24.2.1'
  7. testCompile 'junit:junit:4.12'
  8. compile 'com.squareup.retrofit2:retrofit:2.1.0'
  9. compile 'com.squareup.retrofit2:converter-gson:2.1.0'
  10. compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
  11. compile 'io.reactivex:rxjava:1.2.2'
  12. compile 'io.reactivex:rxandroid:1.2.1'
  13. }

然后添加权限:

  1. <uses-permission android:name="android.permission.INTERNET" />

在贴出代码之前先声明一下,这个帖子里面用到的案例和Retrofit的帖子中用到的案例是同一个。

代码:

两者结合的代码(未封装):

  1. Retrofit retrofit = new Retrofit.Builder()
  2. .baseUrl(SharedData.BASE_URL)
  3. .addConverterFactory(GsonConverterFactory.create())
  4. .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
  5. .build();
  6.  
  7. RetrofitService service = retrofit.create(RetrofitService.class);
  8.  
  9. Observable<InfoData> observable = service.getInfoData();
  10.  
  11. observable
  12. .subscribeOn(Schedulers.io())
  13. .observeOn(AndroidSchedulers.mainThread())
  14. .subscribe(new Subscriber<InfoData>() {
  15. @Override
  16. public void onCompleted() {
  17. }
  18.  
  19. @Override
  20. public void onError(Throwable e) {
  21. }
  22.  
  23. @Override
  24. public void onNext(InfoData infoData) {
  25. Toast.makeText(MainActivity.this, infoData.getName(), Toast.LENGTH_SHORT).show();
  26. }
  27. });

两者结合的代码(封装):

封装好的工具类:

  1. import com.example.itgungnir.testretrofit_rxjava.share.SharedData;
  2.  
  3. import retrofit2.Retrofit;
  4. import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
  5. import retrofit2.converter.gson.GsonConverterFactory;
  6. import rx.Observable;
  7. import rx.Subscriber;
  8. import rx.android.schedulers.AndroidSchedulers;
  9. import rx.schedulers.Schedulers;
  10.  
  11. /**
  12. * 网络访问的工具类
  13. */
  14. public class HttpUtil {
  15. private static HttpUtil instance;
  16.  
  17. private Retrofit retrofit;
  18.  
  19. private HttpUtil() {
  20. this.instance = this;
  21. this.retrofit = new Retrofit.Builder()
  22. .baseUrl(SharedData.BASE_URL)
  23. .addConverterFactory(GsonConverterFactory.create())
  24. .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
  25. .build();
  26. }
  27.  
  28. private static HttpUtil getInstance() {
  29. if (instance == null) {
  30. synchronized (HttpUtil.class) {
  31. if (instance == null) {
  32. return new HttpUtil();
  33. }
  34. }
  35. }
  36. return instance;
  37. }
  38.  
  39. public static <T> T getService(Class<T> c) {
  40. return getInstance().retrofit.create(c);
  41. }
  42.  
  43. public static <T> void init(Observable<T> observable, Subscriber<T> subscriber) {
  44. observable
  45. .subscribeOn(Schedulers.io())
  46. .observeOn(AndroidSchedulers.mainThread())
  47. .subscribe(subscriber);
  48. }
  49. }

在主线程中调用工具类:

  1. public class MainActivity extends AppCompatActivity {
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7.  
  8. HttpUtil.init(HttpUtil.getService(RetrofitService.class).getInfoData(), new Subscriber<InfoData>() {
  9. @Override
  10. public void onCompleted() {
  11. }
  12.  
  13. @Override
  14. public void onError(Throwable e) {
  15. }
  16.  
  17. @Override
  18. public void onNext(InfoData infoData) {
  19. Toast.makeText(MainActivity.this, infoData.getName(), Toast.LENGTH_SHORT).show();
  20. }
  21. });
  22. }
  23. }

运行结果:

【Android - 框架】之Retrofit+RxJava的使用的更多相关文章

  1. Android 网络请求Retrofit + RxJava

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

  2. Android网络框架之Retrofit + RxJava + OkHttp 变化的时代

    1.什么是Retrofit框架? 它是Square公司开发的现在非常流行的网络框架,所以我们在导入它的包的时候都可以看到这个公司的名字,目前的版本是2. 特点: 性能好,处理快,使用简单,Retrof ...

  3. 【Android - 框架】之RxJava的使用

    RxJava算是最新最常用的,也是程序员们最喜欢的框架之一了. RxJava的核心由Observable(被观察者,事件源)和Subscriber(观察者)构成,Observable负责发出一系列事件 ...

  4. 82.Android之MVP+Retrofit+RxJava实践小结

    转载:http://wuxiaolong.me/2016/06/12/mvpRetrofitRxjava/ 关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛 ...

  5. android开发学习 ------- Retrofit+Rxjava+MVP网络请求的实例

    http://www.jianshu.com/p/7b839b7c5884   推荐 ,照着这个敲完 , 测试成功 , 推荐大家都去看一下 . 下面贴一下我照着这个敲完的代码: Book实体类 - 用 ...

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

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

  7. 基于Retrofit+RxJava的Android分层网络请求框架

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

  8. 结合Retrofit,RxJava,Okhttp,FastJson的网络框架RRO

    Retrofit以其灵活的调用形式, 强大的扩展性著称. 随着RxAndroid的推出, Retrofit这样的可插拔式的网络框架因其可以灵活兼容各种数据解析器, 回调形式(主要还是RxJava啦)而 ...

  9. Android Retrofit+RxJava 优雅的处理服务器返回异常、错误

    标签: 开始本博客之前,请先阅读: Retrofit请求数据对错误以及网络异常的处理 异常&错误 实际开发经常有这种情况,比如登录请求,接口返回的 信息包括请求返回的状态:失败还是成功,错误码 ...

随机推荐

  1. Java学习----集合函数

    1.List----有序的collection(序列) 与数组的不同:数据类型可以相同可以不同,数组的长度是预先定义好的,集合的长度也是预先定义好的,但是长度会随着元素的增加而增加 ArrayList ...

  2. yum命令学习

    yum配置文件 /etc/yum.conf yum check-update检查一下有无更新 每天都要(设置定时任务todo) 1.列出所有可更新的软件清单---yum check-update 2. ...

  3. memcached在linux安装

    服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz另外,Memcache用到了lib ...

  4. 基于page的简单页面推送技术

    我们可以先看下简单效果,打开2个页面可以看到推送效果 服务端我们只需要下面一个方法 using System; using System.Collections.Generic; using Syst ...

  5. 练习2 F题 - 平方和与立方和

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description 给定一 ...

  6. iOS版 hello,world版本2

    // // main.m // Hello // // Created by lishujun on 14-8-28. // Copyright (c) 2014年 lishujun. All rig ...

  7. 数据结构练习 01-复杂度2. Maximum Subsequence Sum (25)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  8. 写个自动安装JDK的shell脚本

    #!/bin/bash ################################################# # # INSTALL JDK AUTOMATICALLY # # auth ...

  9. QPixmap有缓冲区的

    我想qt 中QPixmap这个类大家都很熟悉,它可以很简单的在标签上贴图:例如: QPixmap p; p.load("1.png"): label->setPixmap(p ...

  10. squid透明代理+iptables防火墙,多网卡详细配置

    squid透明代理+iptables防火墙详细配置 看到很多人都在不停地问iptables+squid做透明代理的问题,鄙人不才,斗胆在此做统一解答.如有任何纰漏还望各位批评指教. ========= ...