1

我想創建與Firebase數據庫的聊天應用程序。我正在閱讀文檔和看教程,但有一件事我不知道該怎麼做。當用戶向其他用戶發送消息時,使用密鑰創建聊天室:「senderUserId_receiverUserId」
您可以在下面看到我的結構。Firebase數據庫如何從節點創建列表,如WhatsApp聊天頁面

{ 
    "chat_rooms" : { 
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2_oTLYaHMOMibh3ZqOcmpcWDtSCKp1" : { 
     "-KtQEGK38lhZrgnNxmqb" : { 
     "date" : "07/09/2017 10:28", 
     "message" : 「Thanks for helping !」, 
     "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png", 
     "receiverName" : "Ali」, 
     "receiverUid" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1", 
     "senderName" : 「John」, 
     "senderUid" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2" 
     }, 
     "-KtQEKK2BmIMzwruN-21" : { 
     "date" : "07/09/2017 10:28", 
     "message" : 「Another Test Message「, 
     "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png", 
     "receiverName" : 「John」, 
     "receiverUid" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2", 
     "senderName" : "Ali", 
     "senderUid" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1" 
     }, 
     "-KtQIGDk5zE4JZuE9pIQ" : { 
     "date" : "07/09/2017 10:45", 
     "message" : 「Test message !「, 
     "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png", 
     "receiverName" : 「John」, 
     "receiverUid" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2", 
     "senderName" : "Ali", 
     "senderUid" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1" 
     } 
    } 
    }, 
    "users" : { 
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2" : { 
     "address" : 「istanbul」, 
     "cell_phone" : 「none」, 
     "email" : 「[email protected]", 
     "home_phone" : 「none」, 
     "name" : 「John」, 
     "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png", 
     "userId" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2" 
    }, 
    "oTLYaHMOMibh3ZqOcmpcWDtSCKp1" : { 
     "address" : 「istanbul」, 
     "cell_phone" : 「none」, 
     "email" : "[email protected]」, 
     "home_phone" : 「none」, 
     "name" : "Ali", 
     "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png", 
     "userId" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1" 
    } 
    } 
} 

有了這樣一切工作正常,但我不知道如何在例如WhatsApp的聊天頁面列表列出用戶的所有對話。我的意思是當用戶點擊對話項目時,相關的對話將會打開。
我發送私人郵件與下面的代碼:

public void sendMessageToFirebaseUser(final Context context, final ChatMessageModel chat, final String receiverFirebaseToken) { 

     final String room_type_1 = chat.getSenderUid() + "_" + chat.getReceiverUid(); 
     final String room_type_2 = chat.getReceiverUid() + "_" + chat.getSenderUid(); 

     final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference(); 

     databaseReference.child(Constants.ARG_CHAT_ROOMS) 
       .getRef() 
       .addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         if (dataSnapshot.hasChild(room_type_1)) { 
          Log.e("aaa", "sendMessageToFirebaseUser: " + room_type_1 + " exists"); 
          databaseReference.child(Constants.ARG_CHAT_ROOMS) 
            .child(room_type_1) 
            .push() 
            .setValue(chat); 
         } else if (dataSnapshot.hasChild(room_type_2)) { 
          Log.e("aaa", "sendMessageToFirebaseUser: " + room_type_2 + " exists"); 
          databaseReference.child(Constants.ARG_CHAT_ROOMS) 
            .child(room_type_2) 
            .push() 
            .setValue(chat); 
         } else { 
          Log.e("aaa", "sendMessageToFirebaseUser: success"); 
          databaseReference.child(Constants.ARG_CHAT_ROOMS) 
            .child(room_type_1) 
            .push() 
            .setValue(chat); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
    } 

感謝您閱讀我的文章。

回答

0

如果您想要顯示當前用戶的聊天室列表,您應該對您的數據建模以允許這樣做。最簡單的方法是將每個用戶的聊天室列表添加到您的數據模型中:

"userChatrooms" : { 
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2" : { 
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2_oTLYaHMOMibh3ZqOcmpcWDtSCKp1": true 
    }, 
    "oTLYaHMOMibh3ZqOcmpcWDtSCKp1" : { 
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2_oTLYaHMOMibh3ZqOcmpcWDtSCKp1": true 
    } 
} 
+1

謝謝!我想通過這個提示來做我想看到的事情。 – Ali

相關問題