【问题标题】:Firebase Android Chat Realtime Functionality not workingFirebase Android 聊天实时功能不起作用
【发布时间】:2016-11-26 12:18:24
【问题描述】:

我目前正在开发一个 Firebase 聊天应用程序。我下载了一个演示并尝试完成它(http://myapptemplates.com/simple-android-chat-app-tutorial-firebase-integration/

我能够发送和接收消息,但问题是我必须真正退出聊天框并再次加载它才能看到新消息。另一件事是所有注册用户都发送和接收相同的消息,而不是一个收件人和发件人。我是 Firebase 的新手,所以我真的很难修复它。

这是sendMessage()函数:

    private void sendMessage() {
    if (txt.length() == 0)
        return;

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(txt.getWindowToken(), 0);

    String s = txt.getText().toString();

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if(user != null) {
        final Conversation conversation = new Conversation(s,
                Calendar.getInstance().getTime(),
                user.getUid(),
                buddy.getId(),
                "");
        conversation.setStatus(Conversation.STATUS_SENDING);
        convList.add(conversation);
        final String key = FirebaseDatabase.getInstance()
                .getReference("messages")
                .push().getKey();
        FirebaseDatabase.getInstance().getReference("messages").child(key)
                .setValue(conversation)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                           @Override
                                           public void onComplete(@NonNull Task<Void> task) {
                                               if (task.isSuccessful()) {
                                                   convList.get(convList.indexOf(conversation)).setStatus(Conversation.STATUS_SENT);
                                               } else {
                                                   convList.get(convList.indexOf(conversation)).setStatus(Conversation.STATUS_FAILED);
                                               }
                                               FirebaseDatabase.getInstance()
                                                       .getReference("messages")
                                                       .child(key).setValue(convList.get(convList.indexOf(conversation)))
                                                       .addOnCompleteListener(new
                                                                                      OnCompleteListener<Void>() {
                                                                                          @Override
                                                                                          public void onComplete(@NonNull Task<Void> task) {

                                                                                              adp.notifyDataSetChanged();
                                                                                          }
                                                                                      });

                                           }
                                       }
                );
    }
    adp.notifyDataSetChanged();
    txt.setText(null);
}

这里是loadConversationList()

    FirebaseDatabase.getInstance(). getReference("messages").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            if(user != null) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    Conversation conversation = ds.getValue(Conversation.class);
                    if ((conversation.getReceiver().contentEquals(user.getUid()) && conversation.getSender().contentEquals(buddy.getId()))
                            || (conversation.getSender().contentEquals(user.getUid()) && (conversation.getReceiver().contentEquals(buddy.getId())))) {
                        convList.add(conversation);
                        if (lastMsgDate == null
                                || lastMsgDate.before(conversation.getDate()))
                            lastMsgDate = conversation.getDate();

                        adp.notifyDataSetChanged();

                    }
                }
            }
        }

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    您已添加SingleValueListener。这只会读取一次数据。要获得实时功能,您应该像这样添加ValueEventListener

    FirebaseDatabase.getInstance(). getReference("messages").addValueEventListener(new ValueEventListener() {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2018-06-27
      • 2019-08-01
      • 2013-01-12
      相关资源
      最近更新 更多