2017-12-19 3 views
0

ID를 삽입하기 전에 이미 존재하는 ID인지 확인하고 싶습니다. 이것은 내가 지금까지 가지고있는 코드 :Firebase 데이터베이스 ID가 존재하는지 사용자에게 알리십시오.

database.child(id).addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists()) { 
      Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
}); 

문제는 ID가 존재하지 않을 때, 그것은 모두 토스트를 보여주고 있다는 것입니다. 그러나 그것이 존재할 때, 그것은 단지 "그것이 존재한다"는 것을 보여줍니다. 하나.

"존재 함"을 어떻게 표시 할 수 있습니까? 토스트가있을 때만 토스트/어떻게 그것을 막을 수 있습니까? 이드가 존재하지 않을 때를 보여주는 토스트?

편집 :

중포 기지 데이터베이스 구조 :

-DATABASE 
    -ID 
     -NAME 
     -DESCRIPTION 
+1

같은 시도 – R2R

답변

1

이 작업을 수행하십시오 : 우리는이 쉽게 만들 수있는 도우미 함수를 만들었습니다 for와 for는 존재하지 않습니다.

addListenerForSingleValueEvent을 사용하면 이전에 지정한 ID로만 반복됩니다.

1

addListenerForSingleValueEvent으로 addValueEventListener 방법을 교체하십시오.

아마도 addValueEventListener이 데이터 변경으로 인해 두 번 호출되므로 Thirst가 Exist를 표시하는 이유와 동일하지 않음보다 우선 함 일단

데이터 읽기 : 그것은 가정 addListenerForSingleValueEvent 중포 기지 상태에 대한

.

어떤 경우에는 콜백을 한 번 호출하면 유용하고 가 즉시 제거 될 수 있습니다.

모든 아이 (ID)를 반복합니다 valueeventListener 이후
database.child(id).addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    if (dataSnapshot.exists()) { 
     Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show(); 
    } 
} 

따라서 당신이 한 두 Toast를 얻을 것이다 :

1

는 중포 기지 DB 구조를 공유 할 수이

database.child(id).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.getValue()!=null) { 
      Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
관련 문제