Soru & Cevap

Chat uygulamasında boş mesaj atma problemi ...

31.10.2019 - 02:04

Bir chat uygulaması geliştiriyorum KOTLİN dilinde olan bu uygulamada malesef hçbirşey yazmasamda göndere tıkladığımda boş mesaj atıyor bunun çözümü hakkında yardımcı olabilecek birileri varsa çok memnun olurum bu konu hakkında bir türlü sonuca ulaşamadım belki çok kolay bir yolu vardır ama kafam durmuş durumda fikirlerinize açığım istendiği taktirde kodları da paylaşabilirim şimdiden vakit ayıran herkese teşekkürler...

 

Kotlin dilindeki kod parcacığını paylaştım burada uygulamaya çalışıyorum

class ChatLogActivity : AppCompatActivity() {

    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

        toUser = intent.getParcelableExtra<User>(NewMessageActivity.USER_KEY)

        supportActionBar?.title = toUser?.username

//    setupDummyData()
        listenForMessages()

        send_button_chat_log.setOnClickListener {
            Log.d(TAG, "Attempt to send message....")
            
            performSendMessage()
        }
    }


    private fun listenForMessages() {
        val fromId = FirebaseAuth.getInstance().uid
        val toId = toUser?.uid
        val ref = FirebaseDatabase.getInstance().getReference("/user-messages/$fromId/$toId")

        ref.addChildEventListener(object: ChildEventListener {

            override fun onChildAdded(p0: DataSnapshot, p1: String?) {
                val chatMessage = p0.getValue(ChatMessage::class.java)

                if (chatMessage != null) {
                    Log.d(TAG, chatMessage.text)

                    if (chatMessage.fromId == FirebaseAuth.getInstance().uid) {
                        val currentUser = LatestMessagesActivity.currentUser ?: return
                        adapter.add(ChatFromItem(chatMessage.text, currentUser))
                    } else {
                        adapter.add(ChatToItem(chatMessage.text, toUser!!))
                    }
                }

                recyclerview_chat_log.scrollToPosition(adapter.itemCount - 1)

            }

            override fun onCancelled(p0: DatabaseError) {

            }

            override fun onChildChanged(p0: DataSnapshot, p1: String?) {

            }

            override fun onChildMoved(p0: DataSnapshot, p1: String?) {

            }

            override fun onChildRemoved(p0: DataSnapshot) {

            }

        })

    }

    private fun performSendMessage() {
        // how do we actually send a message to firebase...
        val text = edittext_chat_log.text.toString()

        val fromId = FirebaseAuth.getInstance().uid
        val user = intent.getParcelableExtra<User>(NewMessageActivity.USER_KEY)
        val toId = user.uid

        if (fromId == null) return


//    val reference = FirebaseDatabase.getInstance().getReference("/messages").push()
        val reference = FirebaseDatabase.getInstance().getReference("/user-messages/$fromId/$toId").push()

        val toReference = FirebaseDatabase.getInstance().getReference("/user-messages/$toId/$fromId").push()

        val chatMessage = ChatMessage(reference.key!!, text, fromId, toId, System.currentTimeMillis() / 1000)

        reference.setValue(chatMessage)
            .addOnSuccessListener {
                Log.d(TAG, "Saved our chat message: ${reference.key}")
                edittext_chat_log.text.clear()
                recyclerview_chat_log.scrollToPosition(adapter.itemCount - 1)
            }

        toReference.setValue(chatMessage)

        val latestMessageRef = FirebaseDatabase.getInstance().getReference("/latest-messages/$fromId/$toId")
        latestMessageRef.setValue(chatMessage)

        val latestMessageToRef = FirebaseDatabase.getInstance().getReference("/latest-messages/$toId/$fromId")
        latestMessageToRef.setValue(chatMessage)
    }
}

 

41 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user f.erenyucal
f.erenyucal
18.02.2023 - 03:45

Merhaba Turgay, kodlarını uzunca bir süre inceledim. Boş mesajın gönderilmesi, performSendMessage() fonksiyonunda edittext_chat_log.text'in boş olmasından kaynaklanıyor olabilir. Bu durumda, edittext_chat_log.text.toString() ifadesi boş bir string döndürecektir ve bu boş string mesajın içeriği olarak Firebase veritabanına kaydedilecektir

Bunu önlemek için, performSendMessage() fonksiyonunda edittext_chat_log.text'in boş olup olmadığını kontrol etmeniz gerekiyor. Bunun için şu kodu kullanabilirsin diye düşünüyorum

 

private fun performSendMessage() {
    val text = edittext_chat_log.text.toString().trim() // trim() fonksiyonu gereksiz boşlukları kaldırır

    if (text.isBlank()) { // Boş mesajın gönderilmesini engeller
        return
    }

    // ...
}