mercredi 5 février 2020

Can I get a random user out of the firebase realtime database as chat partner as a second option besides a selected user?

I have a problem with coding a Chat application. One of the planned features is getting connected with a random user from the database. Currently I have one button that loads an overview of all users, you can chose one user, and you can chat with that person (message send/receive works, also when i close the app and open it again the messages are still viewable and saved).

For that, I have a NewMessageActivity, which on click on one user leads to the ChatLogActivity and takes the user information with it (toUser and USER_KEY).

Now my plan is to basically skip the NewMessage part and get right into the ChatLogActivity, and assign a random user to that.

I was thinking to just add something like an if/else to my code (so, if toUser is assigned by NewMessageActivity load that, otherwise load random), but I can't get it to work. My users have each individual uid's, that get created randomly when signing up.

Here's my code:


    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()
        }

    } 

Here how I usually get the users for the chat, in case that is important:

        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
    }
}

I'm still a beginner, so I'm pretty clueless what to do by now. If you have any ideas and could help me, I'd really appreciate that! :)

Thanks!




Aucun commentaire:

Enregistrer un commentaire