ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android에서 userType 및 확인 상태를 일치시켜 목록을 가져 오는 방법은 무엇입니까?
    카테고리 없음 2020. 8. 15. 13:15

    질문

    지정 및 확인 상태를 일치시켜 사용자 목록을 가져 오려고하는 앱을 만들고 있습니다. 확인 상태가 0이면 데이터베이스에서 확인 상태가 1 인 경우 (그리고 일치하는 지정도) 목록에서 해당 사용자를 가져와야합니다. 사용자 지정을 일치시켜 목록을 가져 오려고했는데 제대로 작동하지만 확인 상태를 일치 시키려고하면 앱이 중단됩니다.

    목록을 가져오기위한 내 코드.

        mUsersList=(RecyclerView)findViewById(R.id.advrecyclerview);
        mUsersList.setHasFixedSize(true);
        mUsersList.setLayoutManager(new LinearLayoutManager(this));
    
        mUsersDatabaseReference= FirebaseDatabase.getInstance().getReference().child("users");
        mUsersDatabaseReference.keepSynced(true);
    
    
    
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        //String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        //mUsersDatabaseReference.child(uid).child("online").setValue("true");
    
        //-------FIREBASE RECYCLE VIEW ADAPTER-------
    
        mUsersDatabaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
                String verifiedStatus = dataSnapshot.child("VerificationStatus").getValue().toString();
    
                if (verifiedStatus.equals("1")){
                    FirebaseRecyclerAdapter<Users, UserViewHolder> firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<Users, UserViewHolder>(
                            Users.class,
                            R.layout.recycle_list_single_user,
                            AdvTalkActivity.UserViewHolder.class, mUsersDatabaseReference.orderByChild("designation").equalTo("ADVOCATE")){
                        @Override
                        protected void populateViewHolder(final AdvTalkActivity.UserViewHolder viewHolder, final Users users, final int position) {
    
                            viewHolder.setName(users.getName());
                            viewHolder.setStatus(users.getStatus());
                            viewHolder.setdesignation(users.getDesignation());
                            viewHolder.setImage(users.getThumb_image(), getApplicationContext());
                            final String user_id = getRef(position).getKey();
    
    
    
                            viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
    
                                    Intent profileIntent = new Intent(AdvTalkActivity.this, ProfileActivity.class);
                                    profileIntent.putExtra("user_id", user_id);
                                    startActivity(profileIntent);
                                }
                            });
    
                        }
    
                    };
                    mUsersList.setAdapter(firebaseRecyclerAdapter);
                }
            }
    
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
    
                SweetToast.error(AdvTalkActivity.this, "Unknown Error...");
            }
        });
    
    
    
    }
    
    public static class UserViewHolder extends RecyclerView.ViewHolder{
        View mView;
        public UserViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }
    
        public void setName(String name) {
            TextView userNameView=(TextView)mView.findViewById(R.id.textViewSingleListName);
            userNameView.setText(name);
        }
    
    
        public void setStatus(String status) {
            TextView userStatusView=(TextView)mView.findViewById(R.id.textViewSingleListStatus);
            userStatusView.setText(status);
        }
    
        public void setImage(String thumb_image, Context ctx) {
            CircleImageView userImageView = (CircleImageView)mView.findViewById(R.id.circleImageViewUserImage);
            //Log.e("thumb URL is--- ",thumb_image);
            Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.avtarr).into(userImageView);
        }
        public void setdesignation(String designation){
    
            TextView userStatusView=(TextView)mView.findViewById(R.id.textViewSingleListDesignation);
            userStatusView.setText(designation);
    
        }
    }
    
    @Override
    protected void onStop() {
        //String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        //mUsersDatabaseReference.child(uid).child("online").setValue(ServerValue.TIMESTAMP);
    
        super.onStop();
    }

    }

    여기에 이미지 설명 입력


    답변1

    onDataChange내부 dataSnapshot에는 VerificationStatus 가있는 직접적인 자식이 없습니다. 그것이 예외를 일으키는 이유입니다.

    실제로 dataSnapshot 에는 사용자 객체 목록이 포함되어 있습니다. 따라서 먼저 사용자를 파싱 한 다음 사용자 객체에 대한 작업을 수행해야합니다.

    orderByChild ( "VerificationStatus"). equalTo ( "1") 를 사용하여 확인 된 사용자 만 가져 오십시오.

    mUsersDatabaseReference.orderByChild("VerificationStatus").equalTo("1").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
            for(DataSnapshot child: dataSnapshot.getChildren()) {
                Users user = child.getValue(Users.class);
                if(user.getDesignation().equalsIgnoreCase("ADVOCATE")) {
                    //Do your operation here
                }
            }
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
    
            SweetToast.error(AdvTalkActivity.this, "Unknown Error...");
        }
    });


     

     

     

     

    출처 : https://stackoverflow.com/questions/58689292/how-to-fetch-list-by-match-usertype-and-verification-status-in-android

    댓글

Designed by Tistory.