How to perfom query SQL IN clause in Firebase Android

前端 未结 2 1385
一生所求
一生所求 2021-01-25 14:06

How do I query SQL IN clause in Firebase Android? I want to use it in a Firebase Recycler adapter to retrieve only some children based on some condition. Something like the foll

2条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-25 14:29

    I found the solution: we cannot use FirebaseRecyclerAdapter. Instead we have to create custom adapter that extends RecyclerView.ViewHolder.

    For passing values to this adapter, first we have to retrieve data using addValueEventListener and then we have to pass values to our adapter.

    This is my code...

    final ArrayList timelines = new ArrayList<>();
    
        mDatabaseTimeline.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    
                final Timeline timeline = dataSnapshot.getValue(Timeline.class);
    
                if(timeline != null){
    
                    mDatabaseFriends.child(mAuth.getCurrentUser().getUid()).child("active").addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
    
                            if (mAuth.getCurrentUser().getUid().equals(timeline.getUid()) || dataSnapshot.hasChild(timeline.getUid())) {
    
                                timelines.add(timeline);
                                mTimelineRecycler.setAdapter(new RecyclerAdapter(TimelineFragment.this.getContext(), timelines));
    
                            }
                        }
    
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
    
                        }
                    });
                }
            }
    
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
            }
    
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
    
            }
    
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
    

    adapter----->

    public class RecyclerAdapter extends RecyclerView.Adapter {
    
        Context context;
        ArrayList timeline;
    
    
        public RecyclerAdapter(Context context, ArrayList timeline) {
            this.context = context;
            this.timeline = timeline;
    
    
    
        }
    
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
            LayoutInflater inflater = LayoutInflater.from(context);
            View row = inflater.inflate(R.layout.timeline_row, parent, false);
            TimelineViewHolder holder = new TimelineViewHolder(row);
            return holder;
        }
    
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    
    
            final String post_key = timeline.get(position).getPostkey();
    
            ((TimelineViewHolder) holder).setUsername(timeline.get(position).getUsername());
    
    
     }
    
        @Override
        public int getItemCount() {
            return timeline.size();
        }
    
        public class TimelineViewHolder extends RecyclerView.ViewHolder {
            public TimelineViewHolder(View itemView) {
                super(itemView);
    
                view = itemView;
            }
    
            public View getView() {
                return view;
            }    
    
            public void setUsername(String username) {
                TextView usernameTxtView = (TextView) view.findViewById(R.id.timeline_username);
                usernameTxtView.setText(username);
            }
    
        }
    }
    

提交回复
热议问题