All Projects → qyxxjd → RxJava2Demo

qyxxjd / RxJava2Demo

Licence: other
RxJava 2.X Retrofit OkHttp demo

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to RxJava2Demo

Crazydaily
[开源项目] 一款程序员日常放松的App,基于Material Design + MVP-Clean + Weex + Flutter + RxJava2 + Retrofit + Dagger2 + Glide + Okhttp + MTRVA + BRVAH + 炫酷控件 + 炫酷动画
Stars: ✭ 294 (+913.79%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Wanandroid
WanAndroid客户端,项目基于 Material Design + MVP +dagger2 + RxJava + Retrofit + Glide + greendao 等架构进行设计实现,极力打造一款 优秀的玩Android https://www.wanandroid.com 客户端,是一个不错的Android应用开发学习参考项目
Stars: ✭ 223 (+668.97%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Moviehub
Showcases popular movies, tv shows, and people from The Movie Database
Stars: ✭ 325 (+1020.69%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Httprequest
基于Retrofit2+RxJava2+OkHttp3的网络请求框架,可以完美的应用到组件化、MVP模式等项目中
Stars: ✭ 181 (+524.14%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Android Cnblogs
🔥🔥 博客园Android端开源项目,界面简洁清新。
Stars: ✭ 127 (+337.93%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Okhttp Rxhttp
🔥🔥🔥 Based on OkHttp encapsulation, support Kotlin Coroutines、RxJava2、RxJava3; 30s to get started.
Stars: ✭ 3,170 (+10831.03%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Mvvmarms
Android MVVM Architecture Components based on MVPArms and Android Architecture Components.
Stars: ✭ 425 (+1365.52%)
Mutual labels:  rxjava2, retrofit2, okhttp3
RxHttp
基于RxJava2+Retrofit+OkHttp4.x封装的网络请求类库,亮点多多,完美兼容MVVM(ViewModel,LiveData),天生支持网络请求和生命周期绑定,天生支持多BaseUrl,支持文件上传下载进度监听,支持断点下载,支持Glide和网络请求公用一个OkHttpClient⭐⭐⭐
Stars: ✭ 25 (-13.79%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Rxapp
Stars: ✭ 108 (+272.41%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Todo List
待办事项APP
Stars: ✭ 45 (+55.17%)
Mutual labels:  rxjava2, retrofit2, okhttp3
StackOverFlowApi
working with Stack OverFlow Api
Stars: ✭ 24 (-17.24%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Bilisoleil Kotlin
An unofficial bilibili client for android --kotlin+rxjava2+mvp+okhttp3+retrofit2+dagger2
Stars: ✭ 139 (+379.31%)
Mutual labels:  rxjava2, retrofit2, okhttp3
codeKK-Android
http://p.codekk.com/
Stars: ✭ 29 (+0%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Awesome Wanandroid
⚡致力于打造一款极致体验的 http://www.wanandroid.com/ 客户端,知识和美是可以并存的哦QAQn(*≧▽≦*)n
Stars: ✭ 2,525 (+8606.9%)
Mutual labels:  rxjava2, retrofit2, okhttp3
situp android proj
🚀一个基组件化、模块化、MVP + MVVM 计划 App,兼容安卓 10.0 9.0 8.0 等 🔥a app like keep, you can edit your plans here, and you can share your life to others by post, too.🔥
Stars: ✭ 15 (-48.28%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Androidproject
Android 技术中台,但愿人长久,搬砖不再有
Stars: ✭ 4,398 (+15065.52%)
Mutual labels:  rxjava2, retrofit2, okhttp3
eyepetizer kotlin
一款仿开眼短视频App,分别采用MVP、MVVM两种模式实现。一、组件化 + Kotlin + MVP + RxJava + Retrofit + OkHttp 二、组件化 + Kotlin + MVVM + LiveData + DataBinding + Coroutines + RxJava + Retrofit + OkHttp
Stars: ✭ 83 (+186.21%)
Mutual labels:  rxjava2, retrofit2, okhttp3
iMoney
iMoney 金融项目
Stars: ✭ 55 (+89.66%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Bilisoleil
An unofficial bilibili client for android --rxjava2+mvp+okhttp3+retrofit2+dagger2
Stars: ✭ 430 (+1382.76%)
Mutual labels:  rxjava2, retrofit2, okhttp3
Nice Knowledge System
📚不积跬步无以至千里,每天进步一点点,Passion,Self-regulation,Love and Share
Stars: ✭ 137 (+372.41%)
Mutual labels:  rxjava2, retrofit2, okhttp3

RxJava 1.X升级RxJava 2.X部分变更

描述 RxJava 1.X RxJava 2.X
package包名 rx.xxx io.reactivex.xxx
Reactive Streams规范 1.X早于Reactive Streams规范出现,仅部分支持规范 完全支持
Backpressure 背压 对背压的支持不完善 Observable设计为不支持背压
新增Flowable支持背压
null空值 支持 不再支持null值,传入null值会抛出 NullPointerException
Schedulers线程调度器 Schedulers.immediate()
Schedulers.trampoline()
Schedulers.computation()
Schedulers.newThread()
Schedulers.io()
Schedulers.from(executor)
AndroidSchedulers.mainThread()
移除Schedulers.immediate()
新增Schedulers.single()
其它未变
Single 行为类似Observable,但只会发射一个onSuccessonError 按照Reactive Streams规范重新设计,遵循协议onSubscribe(onSuccess/onError)
Completable 行为类似Observable,要么全部成功,要么就失败 按照Reactive Streams规范重新设计,遵循协议onSubscribe (onComplete/onError)
Maybe 2.X新增,行为类似Observable,可能会有一个数据或一个错误,也可能什么都没有。可以将其视为一种返回可空值的方法。这种方法如果不抛出异常的话,将总是会返回一些东西,但是返回值可能为空,也可能不为空。按照Reactive Streams规范设计,遵循协议onSubscribe (onSuccess/onError/onComplete)
Flowable 2.X新增,行为类似Observable,按照Reactive Streams规范设计,支持背压Backpressure
Subject AsyncSubject
BehaviorSubject
PublishSubject
ReplaySubject
UnicastSubject
2.X依然维护这些Subject现有的功能,并新增:
AsyncProcessor
BehaviorProcessor
PublishProcessor
ReplayProcessor
UnicastProcessor
支持背压Backpressure
Subscriber Subscriber 由于与Reactive Streams的命名冲突,Subscriber已重命名为Disposable

RxJava 2.X + Retrofit + OkHttp 简单示例:

1.声明接口

    public interface FaceApi {

        @Multipart
        @POST("facepp/v3/compare")
        Observable<String> compare(@Part("api_key") RequestBody apiKey,
                                   @Part("api_secret") RequestBody apiSecret,
                                   @Part MultipartBody.Part... files);
    }

2.初始化Api

    private void initApi() {
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
                .retryOnConnectionFailure(true)
                .connectTimeout(CONNECT_TIMEOUT_TIME, TimeUnit.SECONDS)
                .writeTimeout(CONNECT_TIMEOUT_TIME, TimeUnit.SECONDS)
                .readTimeout(CONNECT_TIMEOUT_TIME, TimeUnit.SECONDS)
                .build();
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                .create();
        mFaceApi = new Retrofit.Builder().baseUrl(PrivateConstant.FACE_URL_PREFIX)
                                         .client(okHttpClient)
                                         .addConverterFactory(GsonConverterFactory.create(gson))
                                         .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                                         .build()
                                         .create(FaceApi.class);
    }

3.开始网络请求

    /**
     * 测试人脸识别API
     *
     * 实际项目中:步骤1和3会在合适的地方进行统一处理,不需要每个接口都进行设置
     *
     * @param imagePath1 需要比对的照片1
     * @param imagePath2 需要比对的照片2
     * @return
     */
    private void testFaceApi(@NonNull String imagePath1, @NonNull String imagePath2) {
        //PrivateConstant里面声明的私有api_id,需要自己到官网申请
        mFaceApi.compare(convert(PrivateConstant.FACE_API_ID),
                         convert(PrivateConstant.FACE_API_SECRET),
                         convert("image_file1", new File(imagePath1)),
                         convert("image_file2", new File(imagePath2)))
                //1.线程切换的封装
                .compose(RxTransformer.<String>applySchedulers(RxTransformer.Observable.IO_ON_UI))
                //2.当前Activity onStop时自动取消请求
                .compose(this.<String>bindEvent(ActivityEvent.STOP))
                //3.原始数据转换为对象
                .map(DATA_PARSE_FUNCTION)
                .subscribeWith(new DisposableObserver<IdentifyResult>() {
                    @Override
                    public void onNext(IdentifyResult identifyResult) {
                        XLog.d("FaceApi --> " + identifyResult.toString());
                    }

                    @Override
                    public void onError(Throwable e) {
                        XLog.e("FaceApi --> " + e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        XLog.d("FaceApi --> onComplete");
                    }
                });
    }

RxJava 2.X 简单示例: 查看代码

create操作符

    Observable.create(new ObservableOnSubscribe<Integer>() {
                  @Override public void subscribe(ObservableEmitter<Integer> emitter)
                          throws Exception {
                      if (!emitter.isDisposed()) {
                          for (int i = 0; i < 10; i++) {
                              emitter.onNext(i);
                          }
                          emitter.onComplete();
                      }
                  }
              })
              .subscribeOn(Schedulers.io())
              .unsubscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              //这里只列举三种常见的使用方式
              .subscribe(OBSERVER); //方式1
              //.subscribeWith(DISPOSABLE_OBSERVER); //方式2
              //.subscribe(NEXT_CONSUMER, ERROR_CONSUMER, COMPLETE); //方式3

fromArray操作符

    Observable.fromArray(1, 2, 3, 4, 5)
              //使用变换将线程控制的代码封装起来,使代码更简洁,也便于管理
              .compose(RxTransformer.<Integer>applySchedulers(RxTransformer.Observable.IO))
              .subscribeWith(DISPOSABLE_OBSERVER);

fromCallable操作符

    Observable.fromCallable(new Callable<Integer>() {
                  @Override public Integer call() throws Exception {
                      return 123;
                  }
              })
              .compose(RxTransformer.<Integer>applySchedulers(RxTransformer.Observable.IO))
              .subscribeWith(DISPOSABLE_OBSERVER);

fromIterable操作符

    ArrayList<Integer> list = new ArrayList<>();
    list.add(123);
    list.add(456);
    list.add(789);
    Observable.fromIterable(list)
              .compose(RxTransformer.<Integer>applySchedulers(RxTransformer.Observable.IO))
              .subscribeWith(DISPOSABLE_OBSERVER);

fromPublisher操作符

    Observable.fromPublisher(new Publisher<Integer>() {
                  @Override public void subscribe(Subscriber<? super Integer> s) {
                      s.onNext(6);
                      s.onNext(7);
                      s.onNext(8);
                      s.onNext(9);
                      s.onComplete();
                  }
              })
              .compose(RxTransformer.<Integer>applySchedulers(RxTransformer.Observable.IO))
              .subscribeWith(DISPOSABLE_OBSERVER);

just操作符

    Observable.just(1, 2, 3, 4, 5, 6)
              .compose(RxTransformer.<Integer>applySchedulers(RxTransformer.Observable.IO))
              .subscribeWith(DISPOSABLE_OBSERVER);

range操作符

    Observable.range(100, 60)
              .compose(RxTransformer.<Integer>applySchedulers(RxTransformer.Observable.IO))
              .subscribeWith(DISPOSABLE_OBSERVER);

timer操作符

    Observable.timer(10, TimeUnit.MILLISECONDS)
              .compose(RxTransformer.<Long>applySchedulers(RxTransformer.Observable.COMPUTATION))
              .subscribe(new Consumer<Long>() {
                  @Override
                  public void accept(Long aLong) throws Exception {
                      XLog.d("延迟10毫秒的任务启动");
                  }
              });

interval操作符

    Observable.interval(1, TimeUnit.SECONDS)
              .compose(RxTransformer.<Long>applySchedulers(RxTransformer.Observable.COMPUTATION))
              .subscribe(new Consumer<Long>() {
                  @Override
                  public void accept(Long aLong) throws Exception {
                      XLog.d("每隔1秒的定时任务启动");
                  }
              });

上面示例代码用到的变量

    private static final Observer<Integer> OBSERVER = new Observer<Integer>() {
        @Override public void onSubscribe(Disposable d) {
            XLog.d("onSubscribe");
        }

        @Override public void onNext(Integer value) {
            XLog.d("onNext:" + value);
        }

        @Override public void onError(Throwable e) {
            XLog.e("onError:" + e.getMessage());
        }

        @Override public void onComplete() {
            XLog.d("onComplete");
        }
    };

    private static final DisposableObserver<Integer> DISPOSABLE_OBSERVER
            = new DisposableObserver<Integer>() {
        @Override public void onNext(Integer value) {
            XLog.d("onNext:" + value);
        }

        @Override public void onError(Throwable e) {
            XLog.e("onError:" + e.getMessage());
        }

        @Override public void onComplete() {
            XLog.d("onComplete");
        }
    };

    private static final Consumer<Integer> NEXT_CONSUMER = new Consumer<Integer>() {
        @Override public void accept(Integer integer) throws Exception {
            XLog.d("onNext:" + integer);
        }
    };

    private static final Consumer<Throwable> ERROR_CONSUMER = new Consumer<Throwable>() {
        @Override public void accept(Throwable throwable) throws Exception {
            XLog.e("onError:" + throwable.getMessage());
        }
    };

    private static final Action COMPLETE = new Action() {
        @Override public void run() throws Exception {
            XLog.d("onComplete");
        }
    };
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].