0

我想在我的FirebaseDatabase和我正在開發的Android應用程序中構建一個存在系統。目前,我正試圖在我的數據庫上實現onDisconenct()方法。Firebase onDisconnect()。removeValue()總是在客戶端連接時刪除值

private FirebaseAuth auth; 
private FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference dbRef = database.getReference(); 

protected void onCreate(Bundle savedInstanceState){ 
dbRef.child("users").child("customers").child(auth.getCurrentUser().getUid()).onDisconnect().removeValue(new DatabaseReference.CompletionListener() { 
     @Override 
     public void onComplete(DatabaseError error, DatabaseReference firebase) { 
      if (error != null) { 
       System.out.println("could not establish onDisconnect event:" + error.getMessage()); 
      } 
     } 
    }); 
} 

的火力JSON樹的結構爲這樣

APP> 
USERS> 
    CUSTOMERS> 
    UID- 

我現在最大的問題是創建ActivityonDisconnect().removeValue()始終執行(即數據被創建,然後立即刪除) 。發生這種情況時,應用程序仍然連接到數據庫並進行身份驗證。

編輯:

在執行這行代碼

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); 
    connectedRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      boolean connected = snapshot.getValue(Boolean.class); 
      if (connected) { 
       System.out.println("connected"); 
      } else { 
       System.out.println("not connected"); 
       dbRef.child("users").child("customers").child(auth.getCurrentUser().getUid()).removeValue(); 
      } 
     } 

這似乎是應用在不斷的連接,並從數據庫斷開連接...

+0

如果沒有掛起的寫入和沒有註冊的偵聽器,大約一分鐘後連接會自動關閉。 –

+0

yeap猜你也是對的,謝謝! – user6058982

回答

0

想我終於找到了答案,我的問題。如果有人在將來面臨這個問題...

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser(); 
     mUser.getToken(true) 
       .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { 
        public void onComplete(@NonNull Task<GetTokenResult> task) { 
         if (task.isSuccessful()) { 
          idToken = task.getResult().getToken(); 
         } 
        } 

這行循環代碼導致我的客戶端不斷地連接和斷開連接。