java - Android studio 如何在一个类中使用多个快照
问题描述
我正在尝试从数据库中的两个不同子部分进行快照。
private String name;
snap1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
name = value
}
snap2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(value.equals(name)) {
//Do this
}
}
}
}
但是在第一个快照完成后,name
是null
. 我看到里面的onDataChange
名字不是空的。如何将值存储到名称中并将其用于第二个数据快照?
解决方案
Firebase 调用是异步的,您必须等待第一个调用结束才能调用第二个调用。我不知道执行此操作的完美方法,但我创建了一个函数并将我的一个调用放入其中并在第一个调用中调用该函数。你可以像这样做你的工作:
private String name;
snap1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
name = value
secondCall();
}
}
//The function with second call
secondCall(){
snap2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(value.equals(name)){
//Do this
}
}
}
}
推荐阅读
- android - 为什么 TextView 变量需要在循环内
- c# - 如何根据对象的使用有条件地保持对象属性“必需”?
- node.js - Node.js 发布请求返回 404
- isabelle - 有没有学术论文的伊莎贝尔来源的例子?
- java - 在我的程序“AWT-EventQueue-0”java.lang.NullPointerException 中按下按钮时出现此错误
- php - Laravel sortByDesc 和 Paginate 关系
- java - 如何根据显着光值使振动不同?
- rest - GraphQL 如何比 REST 更高效?
- r - 根据 R 中的条件添加元素 rep 的列和 nb
- facebook-graph-api - 视频尚未准备好通过 Facebook Marketing API 在广告中使用