Я использую две коллекции: коллекцию сообщений Firebase Firestore и коллекцию пользователей, как показано ниже:

Если пользователь меняет информацию своего профиля (например, имя, возраст и т. д.), его/ее информация в коллекции пользователей обновляется, и в будущем все сообщения, сделанные этим пользователем, также будут сохранять обновленную информацию о пользователе. . Но сообщения, сделанные этим пользователем в прошлом, по-прежнему содержат старую информацию этого пользователя, в отличие от приложений социальных сетей, в которых, если мы изменим информацию нашего профиля, она начнет отражаться в каждом сообщении.
Чтобы избежать этого, я получаю автора (пользователя) сообщения из коллекции пользователей, используя uid, и показываю эту информацию в пользовательском интерфейсе, как показано ниже:
GlobalScope.launch { вал userDao = UserDao() val user = userDao.getUserById(model.uid).await().toObject(User::class.java)!! withContext(Основной) { imageUserName.text = user.displayName Glide.with(imageUserImage.context).load(user.imageUrl).circleCrop().into(imageUserImage) } } } но здесь я использую копрограмму внутри адаптера, и мне этого не нужно. Я уверен, что найдется лучший способ.
Пожалуйста, подскажите мне, как правильно обновить информацию о пользователях. Сейчас я делаю это следующим образом:
val saveBtn:Button = диалог.findViewById(R.id.save_btn) saveBtn.setOnClickListener { val name = nameEdit.editableText.toString() val курс = курсEdit.editableText.toString() val bio = bioEdit.editableText.toString() если (name.isEmpty()) { Toast.makeText(this, «пожалуйста, напишите свое имя», Toast.LENGTH_LONG).show() }еще{ GlobalScope.launch { val db = FirebaseFirestore.getInstance() val Map = MapOf («displayName» для имени, «курс» для курса, «био» для био) db.collection("пользователи").document(uid).update(карта) диалог.отклонить() val user = mUserDao.getUserById(uid).await().toObject(User::class.java)!! withContext(Основной){ upDateUi (пользователь) } } } } Я думаю, что когда я сохраняю сообщение, мне следует сохранить созданное пользователем (пользователем) каким-то другим способом.
Сейчас я делаю это:
частное развлечение uploadPost() { val title = post_title.text.toString() если(заголовок == ""){ Toast.makeText(this, «напишите что-нибудь», Toast.LENGTH_LONG).show() возвращаться } val диалог = Диалог(это) диалог.setContentView(R.layout.progress_dialog) диалог.шоу() post_btn.isEnabled = ложь val сообщение = Сообщение( текущийUserId, заголовок, текущий пользователь, "", "", "", Система.currentTimeMillis(), 0 ) db.collection("сообщения").add(сообщение) .addOnCompleteListener{postCompleteTask-> если (postCompleteTask.isSuccessful == false) { Log.e(TAG, "исключение во время публикации ${postCompleteTask.Exception}") Toast.makeText( этот, "что-то пошло не так при загрузке поста", Тост.LENGTH_LONG ).показывать() } post_btn.isEnabled = правда диалог.отклонить() заканчивать() } } } Я хочу изменить информацию в профилях пользователей так же, как мы меняем информацию в Instagram, Facebook или LinkedIn.
Мобильная версия