【发布时间】:2020-06-22 01:47:06
【问题描述】:
private Flowable<List<String>> getInfo(){
List<String> myList = new ArrayList<>();
return BehaviorProcessor.create(emitter->{
FirebaseDatabase.getInstance().getReference("url")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (null != dataSnapshot) {
if (dataSnapshot.exists()) {
if (dataSnapshot.hasChildren()) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
final MyClass myClass= postSnapshot.getValue(MyClass.class);
String key = postSnapshot.getKey();
String firsnName = myClass.getFirstName();
myList.add(0, key);
myList.add(1, firsnName);
}
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}, BackpressureStrategy.LATEST);
}
private Flowable<GeoLocation> setMyLocation(){
Flowable.create(emitter -> {
geoFire.setLocation(key, new GeoLocation(myLastLocation.getLatitude(),
myLastLocation.getLongitude()), (k, e) ->{
});
});
}
我想将列表中的值传递给下一个方法。具体来说,我需要将我的密钥作为密钥传递给 GeoFire 的 setLocation 方法,如图所示。我确实了解 onDataChange 是异步调用的,我习惯于在我的 Activity 类中使用回调侦听器来执行此操作。如何在我的 ViewModel 中执行上述操作?我愿意改变整个实施以找到一个可行的解决方案。
我在 Android Java 中使用 ViewModel、LiveDataReactiveStream。我希望能在我的 ViewModel 中使用 RxJava 找到解决方案。
谢谢。
【问题讨论】:
-
myList是什么?它在哪里声明? -
@bubbles 我已编辑以实例化 myList。我正在使用 myList 存储从数据快照返回的字段。
-
这里有编译错误?
Flowable<List<String>> getInfo()但你要返回一个列表! -
@bubbles 我已经进行了编辑。没有更多的编译错误。
标签: java android callback viewmodel geofire