Turkcell | Geleceği Yazanlar

Chat uygulamasında boş mesaj atma problemi

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

 

    0

    Gürkan

    02 Kasım 2019

    Paylaştığınız kodlara göz attım, gözden kaçırmış olabileceğim bir şey yoksa eğer bence herhangi bir sıkıntı yok gibi gözüküyor. Şöyle bir şey önerebilirim. Biraz daha basit bir şekilde bu sorunu çözebilirisinz. Örnek: if(edittext_chat_log.getText.toString() != "") gibi. Aslında paylaştığınız kodlar da mantık olarak bu işi yapıyor. Ama ne kadar basit olursa hata ayıklaması o kadar kolay olabilir, hem de sorunun nereden kaynaklandığı daha kolay bulunabilir.

      turgay.kazdal

      Cmt, 02/11/2019 - 13:40
      private fun performSendMessage() bölümünün altına kodları yazıyorum acaba orada mı bir hata yapıyorum diye düşünmeye başladım çünkü bir sürü şey denedim farklı bir nedenden kaynaklandığını düşünmeye başladım artık

    0

    Gürkan

    31 Ekim 2019

    Birden fazla çözüm yolu olabileceğini düşünüyorum. Ayrı ayrı çözüm yolları:

    1) Mesajı göndermeden önce boş olup olmadığını kontrol ettirerek sorunu çözebilirsiniz.
    2) Öncelikle mesaj gönderme ekranı açıldığında "Gönder" butonunu pasif hale getirebilirsiniz. Ardından ise gönderilecek mesajın uzunluğu 0'dan büyük olduğu an da "Gönder" butonunu aktif hale getirebilirsiniz ve bu sayede de boş mesaj gönderme sorununu çözmüş olursunuz.

      turgay.kazdal

      Per, 31/10/2019 - 11:13
      Öncelikle vakit ayırdığınız için teşekkürler, dediğiniz çözümleri daha önce denedim fakat belki kodları yanlış yazdım belkide kotlin dili farklılıkları nedeni ile sonuç alamadım bilmiyorum aşağıda denediğim 2 kodu paylaştım eğer fark edemdiğim bir hatam veya düzeltmem yada eklemem gereken birşey varsa fikirlerinizden yararlanmak isterim. if (edittext_chat_log.getText.toString().trim({ it <= ' ' }).isEmpty()) { send_button_chat_log.setEnabled(false) } else { send_button_chat_log.setEnabled(true) } ___________________________________________________ if (edittext_chat_log.getText().toString().trim().equals("")){ send_button_chat_log.setEnabled(false); } else{ send_button_chat_log.setEnabled(true); }
    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.