2017-06-26 220 views
1

我一直在使用Google FireBase一段時間,並且發現根據任何輸入都無法獲取大量數據。Firebase數據庫Android

我會用一個例子來解釋: 假設我有一個ArrayList,它包含我所有的朋友的單元格編號。 如果我想檢查我的每個朋友是否都存在於數據庫中,我需要在數組上做一個循環,然後分別檢查每一個,我認爲這並不是那麼好。

所以問題是否有任何選項發送ArrayList作爲輸入,並只返回一次存在的?主要思路是不要將連接到火力點作爲數組列表的大小。

我試圖谷歌出來,但仍然找不到任何好的解決方案。 如果有人有更好的主意也將不勝感激。

回答

1

實現此目的的更好方法是在Firebase數據庫中創建一個名爲phoneNumbers的新節點,然後創建一個listener並使用exists()方法。你的數據庫應該是這樣的:

Firebase-root 
    | 
    ---- phoneNumbers 
     | 
     ---- +1-111-111-1111: true 
     | 
     ---- +1-111-111-1112: true 
     | 
     ---- +1-111-111-1112: true 

這裏是代碼:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference phoneNumbersRef = rootRef.child("phoneNumbers"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if(dataSnapshot.child(phoneNumber).exists()) { 
      Log.d("TAG", "Number exists!"); 
     } else { 
      Log.d("TAG", "Number does not exist!"); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
phoneNumbersRef.addListenerForSingleValueEvent(eventListener); 
+0

感謝您的答覆的人。但是,我已經在我的數據庫中。這個問題有點不同。假設我擁有DB 1000的數字,手機中有10個人,其中5個擁有應用程序,5個不具有應用程序。一般來說,你會循環使用你擁有的10個人,並檢查他們是否存在於數據庫中,但循環在1000上並不好。我想立刻向數據庫發送一個10的數組,並只返回5,以便快速運行。 – AmirM86

+0

即使你會循環1000次記憶,它也能正常工作。由於Firebase數據庫中沒有辦法僅下載每個節點的一個屬性,因此實現此目的的單一方法是使用上述「新節點」。因此,如果您想要一種有效的方式來驗證電話號碼的存在,請下載「phoneNumbers」列表。爲了更好的衡量,你應該精確地保存數據庫中的電話號碼列表。 –

+0

再次感謝,我提供了上面提到的相同示例,但我認爲firebase有點嚴格,因爲db不能像SQL一樣工作。 – AmirM86

相關問題