Как получить список по совпадению userType и статус проверки в Android? - PullRequest
1 голос
/ 04 ноября 2019

Я создаю приложение, в котором я пытаюсь получить список пользователей, сопоставив их назначение и статус проверки. Если статус проверки равен 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();
}

}

enter image description here

1 Ответ

1 голос
/ 04 ноября 2019

Внутри 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...");
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...