Java 如何从Firebase列表中包含的分支获取数据
如图所示,我有一个活动分支,它是一个动态列表,我在其中保存每个活动数据 每个活动数据都包括活动中的另一个分支位置, 我想获取所有活动的位置数据。 我尝试使用下面的代码,但它返回空值Java 如何从Firebase列表中包含的分支获取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,如图所示,我有一个活动分支,它是一个动态列表,我在其中保存每个活动数据 每个活动数据都包括活动中的另一个分支位置, 我想获取所有活动的位置数据。 我尝试使用下面的代码,但它返回空值 void getCampaignsLocations(final OnGetDataListener onGetDataListener){ onGetDataListener.onStart(); Toast.makeText(this, "started", Toast.LENG
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
对象来获得纬度
和经度
。无法将位置
节点下存在的子节点映射到LatLng
对象。除此之外,LatLng
是而不是a。它内置在谷歌play地图中,我也尝试过这样做,但它不起作用String latitude=String.valueOf(ds.child(“location”).child(“latitude”).getValue(Double.class));但是它返回null我认为调用路径的问题是它起作用了,但是从firebase获得的值仍然等于null我将所有值存储在一个列表中,当试图在toast中显示它时,我无法从该屏幕截图中了解太多。请提供一个更明确的,以查看更多的代码。正在尝试将Toast置于onDataChange之外?正在尝试将Toast置于onDataChange之外我正在将所有结果保存在名为“活动位置”的LatLng列表中,并希望测试已收到的数据尝试将消息置于onDataChange之外的问题与Firebase API的事实有关它们是异步的。有关更多信息,您可以查看。