2017-01-30 61 views
0

我已經列表存儲在火力點: -查找列表項目是否存在於Firebase或不在Android中?

names : [ "john" , "jack" , "jason" , 
      "jill" , "travis","alice"] 

而且我有一個列表:

String[] names = {"john" , "jack" , "jane" , "jason"}; 

List<String> list = new ArrayList<>(Arrays.asList(names)); 

我怎樣才能找到約翰插孔傑森的火力點存在, 簡而言之不是沒有從firebase提取列表?

回答

0

Firebase數據庫沒有存在的操作。所以知道一個項目是否存在的唯一方法是檢索它。

也就是說,有幾個選擇來處理這種情況。但我首先想要建議您修復您的數據結構:任何時候您有一個數組並嘗試對其執行一個包含操作時,您應該可能使用了一組數據。與其重複自己,我會在這裏參考我的答案:Firebase query if child of child contains a value。現在去讀吧...當你回來時我會在這裏。

現在,您已經瞭解套VS數組,你會看到你的數據更好,因爲存儲:

names : { 
    "john": true, 
    "jack":true , 
    "jason": true, 
    "jill": true, 
    "travis": true, 
    "alice": true 
} 

好多了。 :-)

現在回到你的問題:你必須檢索一個項目來檢查它是否存在。我可以想到兩種方法來做到這一點:要麼獲取整個列表,要麼獲取每個單獨的項目。

您檢索整個列表,然後利用DataSnapshot.exists()的具體項目:

ref.child("names").addSingleValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     if (snapshot.child("john").exists() && !snapshot.child("jane").exists()) { 
      ... 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.w(TAG, "onCancelled", databaseError.toException()); 
     // ... 
    } 
}); 

另一種方法是檢索單個項目:

ref.child("names/john").addSingleValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     if (snapshot.exists()) { 
      ... 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.w(TAG, "onCancelled", databaseError.toException()); 
     // ... 
    } 
}); 

哪一個最很大程度上取決於有多少你希望列表中的名字。

+0

謝謝...對於修復列表看起來更加結構化。但是我有一個關於firebase的** 90k-95k **元素的**列表**我並不認爲檢查列表僅僅檢查5個元素是一個好主意。此外,客戶端的Firebase和列表中的這兩個列表都可以更改。所以,無論何時列表發生變化,我都必須從firebase中檢索列表。有什麼建議麼 ? –

+0

有了這麼多的名字,你最好不要檢索整個列表。但替代選項仍然適用。 –

相關問題