2016-09-21 3 views
1

Android 용 Firebase에 데이터베이스가 있고 이미지에 표시되는 속성을 가진 객체가 있습니다. 객체는 다음 코드로 데이터베이스에 저장됩니다Android 용 Firebase 데이터베이스에서 중복 데이터를 방지하는 방법

난 당신이 이미지에서 볼 수 있듯이 내가 중복 된 데이터를 보유하고있는 노드를 저장하는 push()을 사용하고 같은
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); 

내가 가진 문제입니다.

enter image description here

중복 데이터를 저장하지 않도록하는 방법은 없나요? 내가 저장할 ID를 가지고 있지 않다는 것을 알았습니다.

어떤 도움이 필요합니까?

+0

이 나는 ​​조건이 당신은 내가 당신이라면, 나는 idUser에 의해 쿼리합니다 밀어 로컬 내가 idVideo 내 목록에있는 경우 내가 확인합니다 밀어 결정하기 전에 모든보고 항목의 목록을하기로 결정 무엇인지에 따라 달려있다 생각 . – KgaboL

+0

다음 질문은 귀하의 질문에 JSON 트리 그림을 포함 시켰습니다. 실제 JSON을 텍스트로 바꾸십시오. Firebase 데이터베이스 콘솔에서 내보내기 버튼을 클릭하면 쉽게 얻을 수 있습니다. JSON을 텍스트로 사용하면 검색이 가능해 지므로 실제 데이터로 테스트하고이를 사용하여 쉽게 답변 할 수 있습니다. 일반적으로 할 일은 단지 좋은 일입니다. –

답변

2

중복 정의 방법에 따라 다릅니다.

사람들이이 질문을하는 일반적인 경우는 사용자를 저장하는 경우입니다. 중복 정의는 간단합니다. 두 사용자 객체가 uid에 대해 동일한 값을 갖는다면, 그것들은 동일한 사용자입니다. 따라서이 경우 푸시 ID 대신에 uid에 사용자를 저장해야합니다.

귀하의 상황에도 동일하게 적용됩니다. 단일 사용자는 하나의 비디오를 볼 수있는 경우, 사용자의 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.if에 저장된 이메일 주소와 일치하는지 확인한 다음 일치하는 항목이 있으면 이메일이 이미 있음을 표시하고 그렇지 않으면 새 키로 저장합니다.

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) { 
      } 
     }); 
관련 문제