我刚刚开始使用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 在同一个对象(POJO)上并为此使用相同的适配器。这意味着我需要下面的代码来调用和合并(?)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
}
});
}