У меня проблема с кодированием приложения чата. Одной из запланированных функций является связь со случайным пользователем из базы данных. В настоящее время у меня есть одна кнопка, которая загружает обзор всех пользователей, вы можете выбрать одного пользователя, и вы можете общаться с этим человеком (отправка / получение сообщений работает, также, когда я закрываю приложение и открываю его снова, сообщения по-прежнему можно просматривать и сохранять ).
Для этого у меня есть функция NewMessageActivity, которая при нажатии на одного пользователя приводит к ChatLogActivity и переносит с ним информацию о пользователе (toUser и USER_KEY).
Теперь мой план состоит в том, чтобы в основном пропустите часть NewMessage и перейдите прямо к ChatLogActivity, и назначьте для этого случайного пользователя.
Я думал просто добавить что-то вроде if / else в мой код (поэтому, если toUser назначен NewMessageActivity загрузить это, иначе загрузить случайным образом), но я не могу заставить его работать. У моих пользователей есть все отдельные идентификаторы пользователей, которые создаются случайным образом при регистрации.
Вот мой код:
companion object {
val TAG = "ChatLog"
}
val adapter = GroupAdapter<GroupieViewHolder>()
var toUser: User? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_chat_log)
recyclerview_chat_log.adapter = adapter
keyboardManagement()
toUser = intent.getParcelableExtra<User>(NewMessageActivity.USER_KEY)
supportActionBar?.title = toUser?.username
listenForMessages()
send_button_chat_log.setOnClickListener {
Log.d(TAG, "Attempt to send message")
performSendMessage()
}
}
Вот как я обычно получаю пользователей для чата, в случае, если это важно :
val ref = FirebaseDatabase.getInstance().getReference("/users")
ref.addListenerForSingleValueEvent(object: ValueEventListener{
override fun onDataChange(p0: DataSnapshot) {
val adapter = GroupAdapter<GroupieViewHolder>()
p0.children.forEach{
Log.d("NewMessage", it.toString())
val user = it.getValue(User::class.java)
if (user != null) {
adapter.add(UserItem(user))
}
}
adapter.setOnItemClickListener{ item, view ->
val userItem = item as UserItem
val intent = Intent(view.context, ChatLogActivity::class.java)
//intent.putExtra(USER_KEY, userItem.user!)
intent.putExtra(USER_KEY, userItem.user)
startActivity(intent)
//Zurück zum Main Menu statt zur User Auswahl
finish()
}
recyclerView_newmessage.adapter = adapter
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
}
class UserItem(val user: User): Item<GroupieViewHolder>() {
//wird aufgerufen für die einzelnen Userobjekte
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
viewHolder.itemView.username_textView_new_message.text = user.username
Picasso.get().load(user.profileImageURL).into(viewHolder.itemView.picture_imageView_new_message)
}
//Einzelne Zeilen gestalten
override fun getLayout(): Int {
return R.layout.user_row_new_messages
}
}
Я все еще новичок, поэтому я совершенно не знаю, что делать сейчас. Если у вас есть какие-либо идеи и вы можете мне помочь, я буду очень признателен! :)
Спасибо!