2017-12-19 5 views
0

IDを挿入する前に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が存在しないとき、それは両方の乾杯を示し、ということです。しかし、それが存在するとき、それは「それが存在する」ことを示すだけである。 1。

「それが存在します」をどのように表示できますか?アイディアが存在するときにのみトーストする/どうすれば "それが存在する"のを防ぐことができますか? idが存在しないときにトーストが表示されますか?

EDIT:

Firebaseデータベース構造:

-DATABASE 
    -ID 
     -NAME 
     -DESCRIPTION 
+1

のように試してみてください – R2R

答えて

1

これを実行してください:valueeventListenerは、すべての子(ID)を反復処理しますので

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を取得しますforとforは存在しません。

addListenerForSingleValueEventを使用すると、前に指定したIDでのみ反復処理されます。

1

addListenerForSingleValueEventであなたのaddValueEventListener方法を交換してみてください。

おそらくaddValueEventListenerは、データが変更されたために2回呼び出されるため、最初にExistを示し、同じIDをExistしない理由があります。一度

リードデータ:それはになっaddListenerForSingleValueEvent firebase状態については

コールバックを一度呼び出すと便利な場合があり、 がすぐに削除されることがあります。私たちは、この を容易にするヘルパー関数を作成しました:

1

あなたはfirebaseデシベル構造を共有することができ、この

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(); 
    } 
}); 
関連する問題