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

Android 如何从fireabase中存储的ArrayList中获取特定记录,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我已将ArrayList存储在firebase DB中,是否有任何方法可以使用ArrayList 目前,我可以获取tripMemberListArrayList,但我想使用memberId 我不想检索完整的ArrayList,只需要使用memberId从tripMemberList中检索一条记录即可 我在下面连接一个firebase DB结构 编辑:如何向firebase添加记录 TripChatDTO tripChatDTO = new TripChatDTO(); tripChatDTO.

我已将ArrayList存储在firebase DB中,是否有任何方法可以使用
ArrayList

目前,我可以获取tripMemberList
ArrayList
,但我想使用
memberId

我不想检索完整的ArrayList,只需要使用
memberId
tripMemberList
中检索一条记录即可

我在下面连接一个firebase DB结构

编辑:如何向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);
TripChatDTO TripChatDTO=新TripChatDTO();
tripChatDTO.setTripId(jsonObject.getInt(“travelId”);
setTripName(travelDTO.getTitle());
setTripPicUrl(jsonObject.getString(“图像”));
List memberDTOList=new ArrayList();
for(int i=0;i
假设
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数据库中的每个对象都是
映射
,而不是
阵列列表

它可能在列表中的任何位置,我想使用'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);

谢谢你的回答,我不知道记录的索引
.child(“0”)它可能在列表中的任何位置。我想使用'memberId'@AkhileshPatil查找一条记录,它不是索引,而是key@cricket_007我存储了一个列表,但我不知道该列表的键,在该特定列表中,只有
memberId
@AkhileshPatil我们无法看到您如何将代码添加到
tripMemberList
,但我的观点是,看看Firebase的结构。是0..5,这是孩子们的钥匙。number值只是一个数字,实际上并不是到element@cricket_007只要一分钟,我会更新我如何添加列表的代码您已经有了Arraylist。为什么需要Firebase的请求?@cricket\u 007 store和get record这两个类都是延迟的。我不想获取完整的列表并循环它,因为将来我的列表get 1000 recordFirebase会通过快照返回整个列表。这只是一个例子。请自行修改以满足您的需要谢谢您的帮助,我可以通过查询获得具体记录