Android自定义RxJava多次调用

时间:2016-12-04 18:26:52

标签: java android firebase retrofit rx-java

我刚刚开始使用RxJava,我有一个问题,我需要从2个不同的firebase json数组中获取数据。这是我的json文件:

    { "userId" : {
"category_list" : [ {
"cat_name" : "Contacts"
}, {
"cat_name" : "Home"
}]}}

{ "Shopping" : {
"category_list" : [ {
"cat_name" : "Clothes"
}, {
"cat_name" : "Equipment"
}]}}

这是我的两个json的POJO

public class CategoryList implements Serializable {
private List<Category> categoryList;

public List<Category> getCategoryList() {
    return categoryList;
}

public void setCategoryList(List<Category> categoryList) {
    this.categoryList = categoryList;
}

}

以下是改装的API调用:

    @PUT("/userData/{userId}.json")
        Observable<CategoryList> insertData(@Path("userId") String userId, @Body CategoryList userArray);

    @GET("/userData/{userId}.json")
        Observable<CategoryList> getUserCategories(@Path("userId") String userId);

    @GET("/adminData/Shopping.json")
        Observable<CategoryList> getAdminCategories();

我已经创建了一个flatmap rxjava,它首先从改造中调用 insertData ,当从同一个数据库调用 getUserCategories 时,我还需要调用 getAdminCategories 在同一个对象(PO​​JO)上并为此使用相同的适配器。这意味着我需要下面的代码来调用和合并(?)1个recyclerView上的两个数据源有谁知道,我怎么能在下面的代码上做到这一点?这是代码:

@Override
public void postArrayAndGetCategories(final String userId, CategoryList userArray) {
 subscription= dataManager.insertData(userId, userArray)
         .flatMap(new Func1<CategoryList, Observable<CategoryList>>() {
             @Override
             public Observable<CategoryList> call(CategoryList categoryList) {
                 // code to save data from service A to db

                 // call service B
                 return dataManager.getUserCategories(userId);
             }
         })
         .subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(new Observer<CategoryList>() {
             @Override
             public void onCompleted() {
             }

             @Override
             public void onError(Throwable e) {
                 Log.e(TAG, e.toString());
                 mainView.showError(e.toString());
             }

             @Override
             public void onNext(CategoryList categoryList) {
                 mainView.showCategoryList(categoryList); // here I use adapter
             }
         });
}

0 个答案:

没有答案