RxJava2学习之九:购物车合并本地和网络数据

RxJava操作符

本例涉及的RxJava操作符:

  • Merge将两个Observable发射的数据组合并成一个

结合使用 Retrofit转换器 GsonConverterFactory 和其 RxJava适配器 RxJavaCallAdapterFactory

RxJava实现

添加依赖

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

业务请求接口

public interface Api {

    @GET("courses")
    Observable<List<Course>> getCourses();

}

RxJava实现

public void merge(View view) {
    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(SERVER_ADDRESS)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
        .build();

    api = retrofit.create(Api.class);

    //Merge合并操作符
    Observable.merge(getDatasFromLocal(), getDatasFromNetWork())
        .subscribe(new Subscriber<List<Course>>() {
            @Override
            public void onCompleted() {
                Log.i(TAG, "onCompleted: ");
            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();
            }

            @Override
            public void onNext(List<Course> courses) {
                for (Course cource : courses){
                    Log.i(TAG, "onNext: " + cource.getName());
                }
            }
        });
}

private Observable<List<Course>> getDatasFromLocal(){
    List<Course> list = new ArrayList<>();
    list.add(new Course("数学"));
    list.add(new Course("语文"));
    return Observable.just(list);
}

private Observable<List<Course>> getDatasFromNetWork(){
    return api.getCourses().subscribeOn(Schedulers.io());
}

Python Flask服务端设计

@app.route("/courses")
def courses():
    course1 = Cource(id="1", name="物理")
    course2 = Cource(id="2", name="化学")

    courses = {course1, course2}
    json = jsonpickle.encode(courses, unpicklable=False)

    return json

class Cource():
    def __init__(self, id, name):
        self.id = id
        self.name = name

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/rxjava2-learning-9-merging-local-and-network-data-in-shopping-carts/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
RxJava2学习之九:购物车合并本地和网络数据
RxJava操作符 本例涉及的RxJava操作符: Merge — 将两个Observable发射的数据组合并成一个 结合使用 Retrofit转换器 GsonConverterFactory 和其 RxJava适配……
<<上一篇
下一篇>>
文章目录
关闭
目 录