如何从存储在fireabase中的ArrayList获取特定记录

时间:2017-08-03 06:57:12

标签: android firebase firebase-realtime-database

我已经在firebase DB中存储了ArrayList,有没有办法使用来自ArrayList

的特定id(memberId)从firebase获取特定记录

目前,我能够获取tripMemberList ArrayList,但我希望使用memberId

从ArrayList获取特定记录

我不想要检索完整的ArrayList只需要tripMemberList使用memberId的单个记录

我在下面附加了一个firebase数据库结构 enter image description here

编辑:我如何向firebase添加记录

TripChatDTO tripChatDTO = new TripChatDTO();
tripChatDTO.setTripId(jsonObject.getInt("travelId"));
tripChatDTO.setTripName(travelDTO.getTitle());
tripChatDTO.setTripPicUrl(jsonObject.getString("image"));
List<TripMemberDTO> memberDTOList = new ArrayList<>();
for (int i = 0; i < invitedFriendArray.length(); i++) {
    JSONObject jsonObject1 = invitedFriendArray.getJSONObject(i);
    TripMemberDTO dto = new TripMemberDTO();
    dto.setMemberId(jsonObject1.getInt("id"));
    dto.setAdmin(false);
    dto.setNotification(true);
    memberDTOList.add(dto);
}
// Add Admin record
TripMemberDTO tripMemberDTO = new TripMemberDTO();
tripMemberDTO.setMemberId(loggedInUser.getId());
tripMemberDTO.setAdmin(true);
tripMemberDTO.setNotification(true);
memberDTOList.add(tripMemberDTO);
// Add all Member record to travel
tripChatDTO.setTripMemberList(memberDTOList);

String channelName = "Trip-" + tripChatDTO.getTripId();
// Create tip
FirebaseDatabase.getInstance().getReference().child(TRIP).child(channelName).setValue(tripChatDTO);

2 个答案:

答案 0 :(得分:1)

假设Trips是Firebase根目录的直接子代,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("Trips").child("Trip-190").child("tripMemberList").child("0");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String memberId = dataSnapshot.child("memberId").getValue(String.class);
        Log.d("TAG", memberId);
    }

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

但请记住,Firebase是一个NoSQL数据库,其结构为键和值对。这意味着Firebase数据库中的每个对象都是Map而不是ArrayList

答案 1 :(得分:1)

  

它可能在列表中的任何位置我想使用`memberId

找到记录

然后遍历顶部元素的子元素

tripMemberRef rootRef = FirebaseDatabase.getInstance().getReference()
   .child("Trips/Trip-190/tripMemberList");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot c : dataSnapshot.getChildren()) {
            String memberId =  c.child("memberId").getValue(String.class);
            Log.d("TAG", memberId);
        }
    }

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