Android Firebase从Fragments中的所有节点(嵌套)检索数据

时间:2017-06-27 02:20:31

标签: android firebase firebase-realtime-database firebase-authentication firebaseui

我希望我的应用以两种方式检索firebase数据:

  1. 检索当前登录用户的数据,我使用.child(user.getUid()),user = firebaseAuth.getCurrentUser()

  2. 从包括登录用户在内的所有用户检索数据(因此这个问题)。

    https://i.stack.imgur.com/WnwQg.png

  3. 换句话说,我想检索所有带圆圈的数据值。

    以下是我的代码:

    AdminFragment.java:

    public class AdminFragment extends Fragment {
    
        public AdminFragment() {
            // Required empty public constructor
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            super.onCreate(savedInstanceState);
            View view = inflater.inflate(R.layout.fragment_admin, container, false);
    
            final DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("users");
            FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
            final FirebaseUser user = firebaseAuth.getCurrentUser();
            final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerAdmin);
            recyclerView.setHasFixedSize(true);
            final LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
            mLayoutManager.setReverseLayout(true);
            mLayoutManager.setStackFromEnd(true);
            recyclerView.setLayoutManager(mLayoutManager);
            final FirebaseRecyclerAdapter<Blog,BlogViewHolder> recyclerAdapter=new FirebaseRecyclerAdapter<Blog,BlogViewHolder>(
                Blog.class,
                R.layout.admin_row,
                BlogViewHolder.class,
                mDatabase
            ) {
                @Override
                protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {
                    viewHolder.setStatus(model.getStatus());
                    viewHolder.setPerson(model.getPerson());
                    viewHolder.setRequest(model.getRequest());
                    viewHolder.setType(model.getType());
                    viewHolder.setStart(model.getStart());
                    viewHolder.setEnd(model.getEnd());
                    viewHolder.setReason(model.getReason());
                }
            };
            recyclerAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver(){
                @Override
                public void onItemRangeInserted(int positionStart, int itemCount){
                super.onItemRangeInserted(positionStart, itemCount);
                    int newsCount = recyclerAdapter.getItemCount();
                    int lastVisiblePosition = mLayoutManager.findLastVisibleItemPosition();
                    if(lastVisiblePosition == -1 || (positionStart>= (newsCount -1) && lastVisiblePosition == (positionStart -1))){
                        recyclerView.scrollToPosition(positionStart);
                    }
                }
            });
            recyclerView.setLayoutManager(mLayoutManager);
            recyclerView.setAdapter(recyclerAdapter);
            return view;
        }
        private static class BlogViewHolder extends RecyclerView.ViewHolder {
            View mView;
            TextView statusTV, personTV, requestTV, typeTV, startTV, endTV, reasonTV;
            public BlogViewHolder(View itemView) {
                super(itemView);
                mView=itemView;
                statusTV = (TextView) itemView.findViewById(R.id.status);
                personTV = (TextView) itemView.findViewById(R.id.person);
                requestTV = (TextView) itemView.findViewById(R.id.request);
                typeTV = (TextView) itemView.findViewById(R.id.type);
                startTV = (TextView) itemView.findViewById(R.id.start);
                endTV = (TextView) itemView.findViewById(R.id.end);
                reasonTV = (TextView) itemView.findViewById(R.id.reason);
            }
            public void setRequest(String request) {
            requestTV.setText(request);
            }
    
            void setStatus(String status){
                statusTV.setText(status);
            }
    
            void setPerson(String person) {
                personTV.setText(person);
            }
    
            void setType(String type) {
                typeTV.setText(type);
            }
    
            void setStart(String start) {
                startTV.setText(start);
            }
    
            void setEnd(String end) {
                endTV.setText(end);
            }
    
            void setReason(String reason) {
                reasonTV.setText(reason);
            }
        }
    
    }
    

    Blog.java:

    public class Blog {
        private String status, person, request, type, start, end, reason, uid;
        public Blog() {
        }
        public Blog(String status, String person, String request, String type, String start, String end, String reason, String uid) {
            this.status = status;
            this.person = person;
            this.request = request;
            this.type = type;
            this.start = start;
            this.end = end;
            this.reason = reason;
            this.uid = uid;
        }
        public String getStatus() {
            return status;
        }
        public void setStatus(String status) {
            this.status = status;
        }
        public String getPerson() {
            return person;
        }
        public void setPerson(String person) {
            this.person = person;
        }
        public String getRequest() {
            return request;
        }
        public void setRequest(String request) {
            this.request = request;
        }
        public String getType() { return type; }
        public void setType(String type) { this.type = type; }
        public String getStart() { return start; }
        public void setStart(String start) { this.start = start; }
        public String getEnd() { return end; }
        public void setEnd(String end) { this.end = end; }
        public String getReason() { return reason; }
        public void setReason(String reason) { this.reason = reason; }
        public String getUid() { return uid; }
        public void setUid(String uid) { this.reason = uid; }
    }
    

1 个答案:

答案 0 :(得分:0)

你好,你可以做这样的事情:

Databaseref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot shot : dataSnapshot.getChildren()) {
            }
        }
});

dataSnapshot.getChildren()的每个元素都是节点上具有uid键的用户。