使用Firebase单独从对象中获取子项

时间:2017-04-03 13:37:40

标签: android firebase firebase-realtime-database

是否可以单独检索下面数据库结构中的每个子项?例如,我想分别检索特定的用户ID(如0e2034ce-bdb0-4623-9f9e-84e302a78354),以及属于该ID的名称,纬度和经度。下面列出的是我当前的尝试,以及数据库结构以及如何添加信息。

// Current attempt
userData.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String userID = (String) dataSnapshot.child()
            String name = (String) dataSnapshot.child(userID).child("Name").getValue();
            String latitude = (String) dataSnapshot.child(userID).child("Lat").getValue();
            String longitude = (String) dataSnapshot.child(userID).child("Lng").getValue();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

// The database structure
Users
    0e2034ce-bdb0-4623-9f9e-84e302a78354
        Name:
        Lat: 
        Lng:
    26d14b76-8341-4167-a670-905e5a58f5db
        Name:
        Lat: 
        Lng:  

// How data is added to the database
DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userData = mRootRef.child("Users");

userData = mRootRef.child("Users").child(thisUser.getUserID()); //getUserID() returns a random string like 0e2034ce-bdb0-4623-9f9e-84e302a78354
userData.setValue("");
userData.child("Name").setValue(mName);
userData.child("Lat").setValue(mLatitude);
userData.child("Lng").setValue(mLongitude);

1 个答案:

答案 0 :(得分:1)

请使用以下代码根据需要获取数据。

ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    @SuppressWarnings("unchecked")
    Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
    String mName= (String) map.get("Name");
    String mLatitude= (String) map.get("Lat");
    String mLongitude= (String) map.get("Lng");
    arrayList.add(mName+ ", " + mLatitude + ", " + mLongitude);

    arrayAdapter = new ArrayAdapter<String>(getActivity(), R.layout.list, arrayList);
    ListView listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(arrayAdapter);
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
userData.addListenerForSingleValueEvent(eventListener);