为什么在最终输出中仅设置一个消息接收者的用户名?

时间:2019-12-28 14:51:57

标签: android firebase google-cloud-firestore android-adapter

在我的Firestore聊天应用程序中,仅正确设置了我数据库中一个用户的用户名,而其他用户根本没有显示任何名称。

UserAdapter.java

@Override
    protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull final User model) {
        holder.fName.setText(model.getfName());
        holder.profile_image.setImageResource(R.drawable.ic_default);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(v.getContext(), MessageActivity.class);
                intent.putExtra("recipientId", model.getUserId());
                v.getContext().startActivity(intent);
            }
        });
    }

MessageActivity.java

username = findViewById(R.id.usernametv);
        rootRef = FirebaseFirestore.getInstance();
        String recipientId = getIntent().getStringExtra("recipientId");
        DocumentReference recipientReference = rootRef.collection("users").document(recipientId);
        recipientReference.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        Log.d(TAG, "DocumentSnapshot data: " + document.getData());
                        User user = document.toObject(User.class);
                        username.setText(user.getfName());
                    } else {
                        Log.d(TAG, "No such document");
                    }
                } else {
                    Log.d(TAG, "get failed with ", task.getException());
                }
            }
        });

我可能是错的,这是因为在onBindViewHolder中将模型声明为final导致的吗?如果是,那么解决方案是什么,因为我最初没有这样声明,而遇到错误,因此不得不将其声明为final来消除错误。

当我单击Jerome时输出 enter image description here

当我单击任何其他用户时输出

enter image description here

1 个答案:

答案 0 :(得分:0)

因为您正在尝试检索未收集用户的文档。只需尝试使用用户集合删除recipentid。