我想在Firebase中設置類似羣聊的內容。 如果你有正確的組ID,你可以加入。如何收聽Firebase setValue完成
問題是Firebase引用始終存在。它們是動態創建的。爲了在加入過程中允許一些錯誤檢查,我想將創建新數據庫條目的用戶添加到用戶表中。
public void createParty() {
// you need to be signed in to create a party
assertState(DBState.SignedIn);
// create a new party
ourPartyDatabaseReference = partiesDatabaseReference.push();
usersDatabaseReference = ourPartyDatabaseReference.child("users");
// write our user to the table of users, now the ourPartyReference actually exists
// and if you look for existing users, you will always find at least the original creator
Task initTask = usersDatabaseReference.child(user.getUid()).setValue(true);
後這樣做了,我叫一個輔助方法connectToParty
建立一些參考和更改數據庫連接DBState.Connected
的狀態。現在你可以把派對的鑰匙傳送給其他用戶。關鍵我的意思是在firebase中的名稱。
問題是:其他用戶需要檢查他們是否使用了有效的密鑰進行連接。他們通過檢查key/users
是否有數據來做到這一點。所以該方只有在第一個用戶已經成功寫入數據庫時纔有效。
有時寫入過程需要很長時間,有時看起來完全失敗。所以我設立了聽衆:
Task initTask = usersDatabaseReference.child(user.getUid()).setValue(true);
initTask.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Object o) {
connectToParty();
}
});
initTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
changeState(DBState.SignedIn, DBTransition.Failure);
}
});
這包括在測試中。測試建立連接,登錄並創建派對。如果派對在特定的超時時間內創建,則測試通過。
9的10倍這工作沒有問題。 但有時候測試失敗。
這與暫停時間短暫無關。這個任務的回調函數根本不會被調用。 我讀過這個回調只適用於你的連接在線。
因此我在任務之前將firebaseDatabase.goOnline();
添加到了我的代碼中。但是這並沒有幫助。
我通過局域網連接到互聯網。所有其他測試都通過了,他們也需要訪問Firebase。例如對於登錄過程。
將值寫入數據庫並等待寫入完成的正確方法是什麼?
有什麼錯誤時,測試失敗? –
這是暫停。我等待回調10秒鐘,然後測試失敗。 – lhk
因此,這兩者都不被稱爲 – lhk