java - 如何从 Firebase 列表中包含的分支获取数据
问题描述
如图所示,我有活动分支,它是一个动态列表,我保存每个活动数据。
https://drive.google.com/file/d/16xe1aeAxEbtfiiUFoXtlqvFPucHejQp7/view?usp=sharing
每个活动数据都包括位置,这是活动中的另一个分支,我想获取所有活动的位置数据。我使用下面的代码进行了尝试,但它返回空值。
void getCampaignsLocations(final OnGetDataListener onGetDataListener){
onGetDataListener.onStart();
Toast.makeText(this, "started", Toast.LENGTH_SHORT).show();
DatabaseReference campaignsRoot = FirebaseDatabase.getInstance().getReference();
DatabaseReference campaignsPath = campaignsRoot.child("campaigns");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
LatLng l = ds.child("location").getValue(LatLng.class);
campaignsLocations.add(l);
onGetDataListener.onSuccess(dataSnapshot,0,"");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
campaignsPath.addListenerForSingleValueEvent(valueEventListener);
}
解决方案
要解决此问题,请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference campaignsRef = rootRef.child("campaigns");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
double latitude = ds.child("location").child("latitude").getValue(Double.class);
double longitute = ds.child("location").child("longitute").getValue(Double.class);
Log.d(TAG, latitude ", " + longitute);
LatLng latLng = new LatLng(latitude, longitute);
//Do what you need to do with your LatLng object
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
campaignsRef.addListenerForSingleValueEvent(valueEventListener);
请注意,为了创建LatLng
对象,您需要遍历DataSnapshot
对象以获取latitude
and longitute
。location
您无法将节点下存在的子代映射到LatLng
对象。除此之外,LatLng
不是Firebase支持的数据类型。
推荐阅读
- python - 我需要帮助将 Perl 的“解包”代码转换为 Python 代码
- javascript - 从画布返回 dataURL 而不使用回调
- django - 如何修复 ModuleNotFoundError
- recaptcha - 如何在页面背景中包含 reCAPTCHA v3?
- python - 如何将子列表分解为字典?
- spring - 非空属性在添加具有外键的新用户时引用空值
- java - 你可以在android studio中将蓝牙套接字从一个活动转移到另一个活动吗
- php - 如何在文件系统 laravel 5.8 中将双斜杠替换/转换为单斜杠
- ruby-on-rails - 尝试升级 Rails 依赖项会导致序列化程序引发错误:Hash:Clas 的未定义方法“model_name”
- python - 是否可以从 Tensorflow 中的检查点模型恢复训练?