Как изменить информацию об авторе внутри каждой коллекции сообщений, созданной этим автором в облачном магазине FirestorAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Как изменить информацию об авторе внутри каждой коллекции сообщений, созданной этим автором в облачном магазине Firestor

Сообщение Гость »


Я использую две коллекции: коллекцию сообщений 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.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»