2016-09-21 79 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) { 
      } 
     }); 
相关问题