当子项与表嵌套时如何在firebase中获取数据

时间:2016-09-15 10:22:06

标签: android firebase firebase-realtime-database

enter image description here

上面的图片是我在firebase中的数据库结构。我不知道如何获取子Latlng内的数据。我该如何获取它?

3 个答案:

答案 0 :(得分:1)

在您的项目中,您需要一个代表“Driver”实体的POJO。类似的东西:

public class Driver {

    private String age;
    private String busNum;
    // etc ...

    private HashMap<String, Object> Latlng;

    public Driver() {
    }

    // getters ...

    public HashMap<String, Object> getLatlng() {
        return Latlng;
    }

}

Firebase中,内部对象必须声明为HashMaps<String, Object>,其中String是关键,Object可以是模型中的任何其他对象(在你的情况是Float我敢打赌。)

现在,如果你想只读一些值 ,只需调用addListenerForSingleValueEvent方法,如下所示:

FirebaseDatabase.getInstance()
                .getReferenceFromUrl(URL_DRIVERS)
                .child(driverKey)
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        Driver driver = dataSnapshot.getValue(Driver.class);

                        // And here you can access Latlng object
                        latitude = driver.getLatlng().get("latitude");
                        longitude = driver.getLatlng().get("longitude");
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        // handle error ...
                    }
                });

注意:URL_DRIVERS将是您的根节点网址(https://your-project.firebaseio.com/)加上您的驱动程序节点位置(在您的情况下为“驱动程序”)

答案 1 :(得分:0)

如果您只是想知道如何获得这些值,那么就像这样:

String lat;
String lon;

String userId = // [get userID from firebase]

String mDatabase = // [get database ref from firebase]


mDatabase.child("Driver").child(userId).child("Latlng").addListenerForSingleValueEvent(
    new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            lat = dataSnapshot.child("latitude").getValue();
            lon = dataSnapshot.child("longitude").getValue();

            // ...
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w(TAG, "getUser:onCancelled", databaseError.toException());
            // ...
        }
    });

答案 2 :(得分:0)

从您分享的数据的屏幕截图中我可以理解您正在推动驱动程序节点中的值,所以如果我猜对了,那么它不是您可以获得并通过的用户ID在代码中(如其他答案中所述)。

在这种情况下,您必须获取驱动程序节点

的快照

1。)创建一个Drier实体的POJO,Driver.class

public class Driver {

private String age;
private String busNum;
// etc ...

private HashMap<String, Object> Latlng;

public Driver() {
}

// add all getters and setters...

public HashMap<String, Object> getLatlng() {
    return Latlng;
}}

在您的活动课程中

DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Driver");
    mDatabaseReference.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            System.out.println("There are total" + dataSnapshot.getChildrenCount() + " values");
            for (DataSnapshot driverSnapshot: dataSnapshot.getChildren()) {
                SampleContent content= driverSnapshot.getValue(Driver.class);

                System.out.println(content.getLatlng().toString());

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

注意:我没有运行代码可能存在语法错误,请原谅我。

另请查看https://firebase.google.com/docs/database/android/retrieve-data了解详情。