从Firebase数据库并行检索数据并与Android中的UI同步
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从Firebase数据库并行检索数据并与Android中的UI同步,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1917字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试在我的应用程序中实现Firebase数据库,但是在同时从多个节点检索数据并更新ui时遇到了问题.
我将所有Firebase方法存储在单独的类中.
这是从节点检索一个基准的一种方法的示例.
public static void getTrainerCity(final Trainer trainer) {
dbref.child(USER_CITY).child(trainer.getId()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
trainer.setCity(dataSnapshot.getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
然后,例如,获得一名完整的培训师
public static void getTrainer(final boolean isAthlete, final String trainerId, Trainer trainer) {
trainer.setId(trainerId);
getTrainerCity(trainer);
getTrainerName(trainer);
getTrainerAge(trainer);
getTrainerNumber(trainer);
getTrainerEmail(trainer);
getTrainerGym(trainer);
getTrainerPhoto(trainer);
getTrainerStudyDegree(trainer);
getTrainerDescription(trainer);
if(!isAthlete) {
getTrainerAthletes(trainer);
}
}
当我在UI中调用此方法时,由于这些方法不在主线程上运行,因此无法一目了然地获得整个Trainer对象.这意味着培训师会不断更新.但是,我只想在与该方法相关的对象的所有字段均已设置时通知UI(我必须填充列表并初始化用户).你会怎么做?
我曾考虑过要加入侦听器,但似乎我需要大量的侦听器.感谢大伙们
编辑:这就是Db的结构
解决方法:
在这种情况下,RxJava大放异彩…..您可以做的就是将Firebase查询包装在Observable.create()中,然后使用RxJava zip运算符之类的东西来组合所有查询.另一种方法(如果可能,应避免使用)是嵌套所有导致可怕的回调地狱的查询
例如,对于getTrainerCity,您可能会有类似的内容
public static Observable<String> getTrainerCity(int trainerId) {
return Observable.create(subscriber -> {
dbref.child(USER_CITY).child(trainerId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String city = dataSnapshot.getValue(String.class);
subscriber.onNext(city);
subscriber.onCompleted();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
});
}
内容总结
以上是互联网集市为您收集整理的从Firebase数据库并行检索数据并与Android中的UI同步全部内容,希望文章能够帮你解决从Firebase数据库并行检索数据并与Android中的UI同步所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。