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
上一篇 RxJava2学习之八:防止按钮重复(连续)点击
下一篇 RxJava2学习之十:发送验证码倒计时
目录
文章列表
1 CentOS 7下OpenLDAP编译安装及配置
CentOS 7下OpenLDAP编译安装及配置
2
Spring Security OAuth2 用户登录失败事件发布及监听
Spring Security OAuth2 用户登录失败事件发布及监听
3
OpenWrt软件包管理及LUCI汉化
OpenWrt软件包管理及LUCI汉化
4
Flutter Widget之CircleAvatar
Flutter Widget之CircleAvatar
5
Linux下MySQL为用户分配指定数据库
Linux下MySQL为用户分配指定数据库
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。