java - 如何从 Firebase 列表中包含的分支获取数据

标签 java android firebase firebase-realtime-database

如图所示,我有一个 Activity 分支,它是一个动态列表,我在其中保存每个 Activity 数据。

https://drive.google.com/file/d/16xe1aeAxEbtfiiUFoXtlqvFPucHejQp7/view?usp=sharing

每个 Activity 数据都包含 Activity 内其他分支的位置, 我想获取所有 Activity 的位置数据。 我使用下面的代码尝试了它,但它返回空值。

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 对象以获取纬度经度。您无法将 location 节点下存在的子级映射到 LatLng 对象。除此之外,LatLng 不是 Firebase supported data type .

关于java - 如何从 Firebase 列表中包含的分支获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56131657/

相关文章:

Java Synchronized 将一个类的所有同步方法相互同步?

swift - Firebase 用户无法注销 - Swift

ios - 使用 Swift 在 Firebase 中添加值而不是更改值

android - 如何与三星手机上的 BadgeProvider 交互以向应用程序图标添加计数?

android - 我如何从条形码扫描仪获取 UPC 代码?

android - 使用 RemoteView 自动取消自定义通知

android - 应用程序在后台时未收到 Firebase 云消息

java - 如何使用触摸监听器并仅在触摸按钮时播放声音?

java - 如何在 Android 中将 Hashset 保存到文件?

java - 通过字符串调用 Drawable-Resource