2016-08-18 99 views
0

從實時數據庫的數據,我用了實時數據庫與此設置:如何獲得在火力地堡

->users 
    ->uid 
     ->name 
     ->email 
     ->other info 

如果我想保存用戶數據,我會用我的用戶類,然後設置在數據庫中的對象是這樣的:

//assume variables have already been declared... 

mFirebaseAuth = FirebaseAuth.getInstance(); 
mFirebaseUser = mFirebaseAuth.getCurrentUser(); 
User user = new User(name, email, other values...); 
mDBRef.child("users").child(mFirebaseUser.getUid()).setValue(user); 

我試過了,它工作正常。

但是我怎樣才能從數據庫中檢索這些值?例如,一旦我如上所示設置用戶對象,我可能想要檢索用戶的電子郵件。我不是指通過登錄提供商獲取電子郵件。我想通過實時數據庫的電子郵件。我已經嘗試過一段時間了,但文檔沒有什麼幫助。它顯示的是設置監聽器以等待數據的更改。但我不是在等待變化,我不想要一個聽衆。我想通過使用JSON樹中的鍵直接獲取數據庫中的值。這是可能通過實時數據庫嗎?如果是這樣,怎麼做,因爲文檔沒有解釋它,或者我只是不理解它。如果不可能,我是否應該使用存儲數據庫或其他東西?謝謝。

+0

從Firebase數據庫獲取數據的方法是附加偵聽器。請參閱https://firebase.google.com/docs/database/android/retrieve-data –

+0

@FrankvanPuffelen我相信您是從事Firebase工作的工程師之一? (看到你回答很多帖子)。如果是這樣的話,我認爲以Ian Richard在回答聽衆討論文檔的回答時解釋的方式添加解釋會非常有幫助。 –

回答

3

Firebase使用偵聽器來獲取數據。這只是它的工作原理。雖然,您可以使用單個事件偵聽器(相當於只抓取一次數據)。它會立即啓動並獲取數據,並且不會再次啓動。以下是獲取當前用戶電子郵件的代碼示例:

//Get User ID 
final String userId = getUid(); 

//Single event listener 
mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
    new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      // Get user value 
      User user = dataSnapshot.getValue(User.class); 

      //user.email now has your email value 
     } 
    }); 
+0

好的,但我擔心這是發生在數據是_changed_時,沒有?如果我沒有在數據庫中添加或修改任何內容,但是我想要某個用戶的數據呢? –

+0

不,這是一個值事件監聽器,並且會立即獲取預期的數據。 onDataChange方法只抓取dataSnapshot,但不會等待任何要更改的內容。 –

+0

那個很混亂的人。一般來說,我從來不會知道聽衆的本質,名字「onDataChange」。感謝您的解釋,但這正是我需要的! –