Android自定义RxJava多次调用
我刚刚开始使用RxJava,我有一个问题,我需要从2个不同的firebase json数组中获取数据。这里是我的JSON文件:Android自定义RxJava多次调用
{ "userId" : {
"category_list" : [ {
"cat_name" : "Contacts"
}, {
"cat_name" : "Home"
}]}}
{ "Shopping" : {
"category_list" : [ {
"cat_name" : "Clothes"
}, {
"cat_name" : "Equipment"
}]}}
这里是我的两个JSON
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调用POJO:
@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();
我已经创建一个平面地图rxjava,它首先调用insertData从改造a第二,当调用getUserCategories来自同一个数据库,但我也需要是调用同一个对象(POJO)上getAdminCategories并使用相同的适配器此。这意味着我需要下面的代码来调用和合并(?)两个数据源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
}
});
}
这很容易,如果你想合并两个来源,只需使用merge运算符。
dataManager.getAdminCategories().mergeWith(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);
}
}))
亚历山大Perfilyev,谢谢你的回答,但似乎错误。当我启动我的活动getAdminCategories结果显示的是第二,但getUserCategories叫我以后只是自败?这是因为mergeWith的什么是错的我的适配器? –
是的,这可能是因为您在添加新项目时清除旧的适配器数据。尝试使用DiffUtil或SortedList作为适配器。减轻它的另一种方法是添加.toList()。这样你只会得到一个onNext()调用。 –
太棒了,你太棒了!谢谢 –
我建议你尝试RxFirebase库,以与RxJava和火力地堡起来较轻松的工作岗位:https://github.com/FrangSierra/Rx2Firebase –