我尝试使用Realm和RxJava实现模式Repository.存储库接口具有这样的签名
Observable<List<T>> query(Specification specification);
Run Code Online (Sandbox Code Playgroud)
因此,当我使用Realm并想要检索结果"asObservable"时,我得到了Observable>.我找不到将Observable变换为Observable>的方法.
任何人都可以帮忙解决这个问题吗?
我试过这样的事
final Observable<RealmResults<PlantRealm>> realmResults = realm.where(PlantRealm.class)
.equalTo(PlantTable.ID, "1")
.findAll().asObservable();
// convert Observable<RealmResults<PlantRealm>> into Observable<List<PlantRealm>>
return realmResults.flatMap(Observable::from).toList().map(list -> {
for (PlantRealm plantRealm : list) {
plants.add(toPlant.map(plantRealm));
}
return Observable.from(plants);
}
);
Run Code Online (Sandbox Code Playgroud)
但类型检查系统仍在抱怨....
return Observable.create( subscriber -> {
final Realm realm = Realm.getInstance(realmConfiguration);
final RealmResults<PlantRealm> realmResults = realm.where(PlantRealm.class)
.equalTo(PlantTable.ID, "1")
.findAll();
final List<Plant> plants = new ArrayList<>();
for (PlantRealm plantRealm : realmResults) {
plants.add(toPlant.map(plantRealm));
}
realm.close();
subscriber.onNext(plants);
subscriber.onCompleted();
});
Run Code Online (Sandbox Code Playgroud) 我实现了两个存储库以管理我的数据.因此,如果数据库中没有数据,则应向API询问相关信息.我在其他帖子中看到这可以使用switchIfEmpty解决,但它对我不起作用.
我尝试了以下代码.调用行restApiFlavorRepository.query(规范),但永远不会通知订阅者.
public Observable query(Specification specification) {
final Observable observable = flavorDaoRepository.query(specification);
return observable.map(new Func1() {
@Override
public Observable<List<Flavor>> call(Object o) {
if(((ArrayList<Flavor>)o).isEmpty()) {
return restApiFlavorRepository.query(specification);
}
return null;
}
});
}
Run Code Online (Sandbox Code Playgroud)
还有这个
public Observable query(Specification specification) {
final Observable observable = flavorDaoRepository.query(specification);
return observable.switchIfEmpty(restApiFlavorRepository.query(specification));
}
Run Code Online (Sandbox Code Playgroud)
当我获得两种口味时,我仍然会得到空列表.
更新
我在找什么,是这个......
public Observable query(Specification specification) {
Observable<List<Plant>> query = mRepositories.get(0).query(specification);
List<Plant> list = new ArrayList<>();
query.subscribe(plants -> list.addAll(plants));
Observable<List<Plant>> observable = Observable.just(list);
return observable.map(v -> !v.isEmpty()).firstOrDefault(false)
.flatMap(exists -> …Run Code Online (Sandbox Code Playgroud) 我在这里阅读了一些关于这个问题的帖子,但我无法显示 FAB。我尝试了不同的方法,但我真的不知道发生了什么。
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="112dp"
android:background="@color/colorPrimary"
android:elevation="@dimen/elevation_toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="@color/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|enterAlways"
android:fitsSystemWindows="true">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:layout_marginLeft="@dimen/list_toolbar_side_margin"
android:layout_marginRight="@dimen/list_toolbar_side_margin"
app:layout_collapseMode="pin" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
style="@style/AppTabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:tabGravity="fill"
app:tabMode="fixed"
app:tabTextAppearance="@style/AppTabTextAppearance"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_id"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="end|bottom"
android:layout_margin="16dp"
android:clickable="true"
android:src="@drawable/ic_add"
/>
Run Code Online (Sandbox Code Playgroud)
如果它检查 android studio 中的预览,则 fab 就在那里。甚至,当我调试应用程序时,我可以看到 fab 已创建。
我也尝试将app:layout_anchor="@id/viewpager"或app:layout_anchor="@id/app_bar_layout"与 **app:layout_anchorGravity="bottom|right" ** 一起使用,但没有奏效。FAB 被 viewpager 覆盖。我怎样才能避免这种情况?
我附上主要活动的图像。您将看到一个按钮“添加植物”。该按钮应由 FAB …
android android-viewpager floating-action-button android-coordinatorlayout
我必须将jbehave与jenkins整合在一起.但我不知道如何做到这一点.我看到我必须在Jenkins中创建一个任务,但我不知道我应该在哪里接受这个任务.
有人能帮助我吗?
谢谢,
萨朗