gpt4 book ai didi

java - 来自 Firebase 实时数据库的 equalTo 数据快照返回空值

转载 作者:行者123 更新时间:2023-12-02 10:13:56 24 4
gpt4 key购买 nike

当用户启动 Activity 时,应弹出一个包含父节点的 Toast,其中值“drinkManufacturerID”等于给定的字符串。但是,Toast 中返回了空值。

相关代码:

public class DealRawDataActivity extends AppCompatActivity {

DatabaseReference databaseDrinks;

String keys;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deal_raw_data);

databaseDrinks = FirebaseDatabase.getInstance().getReference("drinks").child("-LWLuM2nesg0uaP0dLSn");

databaseDrinks.orderByChild("drinkManufacturerID").equalTo("D1eY5v9guwSIWMvfLoq8xGywrT53").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
keys = datas.getKey();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

Toast.makeText(this, keys, Toast.LENGTH_LONG).show();
}

}

Firebase 实时数据库结构: enter image description here

最佳答案

当尝试在回调之外显示包含 keys 变量值的 Toast 消息时,由于 onDataChange() 具有异步行为。由于该方法立即返回,因此您尝试显示的 keys 变量的值尚未从回调中填充。无法保证需要多长时间。因此,可能需要几百毫秒到几秒的时间才能获得数据。

此问题的快速解决方案是使用移动以下代码行:

Toast.makeText(this, keys, Toast.LENGTH_LONG).show();

在 for 循环结束之后,否则我建议您查看此 post 中我的答案的最后部分 其中我解释了如何使用自定义回调来完成它。您还可以看看这个video 为了更好地理解。

编辑:请参阅下面的完整代码:

public class DealRawDataActivity extends AppCompatActivity {
DatabaseReference databaseDrinks;
String keys;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deal_raw_data);
databaseDrinks = FirebaseDatabase.getInstance().getReference("drinks").child("-LWLuM2nesg0uaP0dLSn");
databaseDrinks.orderByChild("drinkManufacturerID").equalTo("D1eY5v9guwSIWMvfLoq8xGywrT53").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
keys = datas.getKey();
}
Toast.makeText(this, keys, Toast.LENGTH_LONG).show(); //Should work!!
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}
}

关于java - 来自 Firebase 实时数据库的 equalTo 数据快照返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54810061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com