2016-09-21 49 views
1

我在Android版Firebase中擁有一個數據庫,並且我擁有一個包含在圖片中看到的屬性的對象。對象存儲在用下面的代碼數據庫:如何防止在Android版Firebase數據庫中出現重複數據

FirebaseUser user = mAuth.getCurrentUser(); 
String videoId = getIntent().getStringExtra("VIDEO_ID"); 
minuto = player.getCurrentTimeMillis(); 
Watching watching = new Watching(user.getUid(), videoId, String.valueOf(minuto)); 
DatabaseReference mRef = database.getReference().child("Watching").push(); 
mRef.setValue(watching); 

我的問題是因爲我使用push()來存儲我有重複的數據節點,你可以在圖片中看到。

enter image description here

有什麼辦法來避免存儲重複數據?知道我沒有自己的ID存儲。

任何幫助?

+0

我認爲這取決於在你決定要推,如果我是你,我將ID用戶所查詢,並在本地,我決定要推我將檢查idVideo在我的列表中存在前所有在場觀看的產品清單條件。 – KgaboL

+0

對於下一個問題:您在問題中包含了JSON樹的圖片。請用實際的JSON替換爲文本,您可以通過點擊Firebase數據庫控制檯中的導出按鈕輕鬆獲取。將JSON作爲文本可以搜索,使我們能夠輕鬆使用它來測試您的實際數據,並將其用於我們的答案中,並且通常只是一件好事。 –

回答

2

這取決於您如何定義重複。

人們有這個問題的一個常見情況是他們存儲用戶的時候。這裏重複的定義很簡單:如果兩個用戶對象的uid值相同,則它們是同一個用戶。因此,在這種情況下,您應該將用戶存儲在uid之下,而不是使用推送ID。

這同樣適用於您的情況。如果一個用戶只能收看一個視頻,用戶的uid存儲Watching下的節點:

Watching 
    "NX7...A33" 
     "idVideo": "b13...o4s" 
     "minute": "0" 

但是,如果它的uid + idVideo是獨一無二的組合,存儲組合鍵下的節點:

Watching 
    "NX7...A33_b13...o4s": "0" 

現在你可以很容易地防止重複,通過使用setValue()代替push()

String key = user.getUid() + "_" + videoId; 
ref.child("Watching").child(key).setValue(String.valueOf(minuto)); 
0

我面臨着和你一樣的問題,這就是我弄明白的。我檢查用戶輸入的電子郵件地址與保存在我的db中的電子郵件地址。如果找到任何匹配,則顯示敬酒電子郵件已存在,否則用新密鑰保存。

mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(final DataSnapshot dataSnapshot) { 
       for (DataSnapshot data : dataSnapshot.getChildren()) { 
       //If email exists then toast shows else store the data on new key 
        if (!data.getValue(User.class).getEmail().equals(email)) { 
         mFirebaseDatabase.child(mFirebaseDatabase.push().getKey()).setValue(new User(name, email)); 
        } else { 
         Toast.makeText(ChatListActivity.this, "E-mail already exists.", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 

      @Override 
      public void onCancelled(final DatabaseError databaseError) { 
      } 
     }); 
相關問題