2017-09-07 14 views
0

値が既にデータベースに存在するかどうかをチェックすることで、ユーザーは更新時に同じ番号に変更することができません。 IDFirebase Android - 値が既に存在するか確認してください

私は何時間も解決策を探していましたが、それが機能しているのを見つけることができません。

ID

+0

例えば、彼らはあなたが確実なデータ構造について正しい101 –

答えて

0

データ構造、索引リストを作成する前に、推奨する理由は何ですか?あなたがこのトンを持っているときidsそれは良いクエリになります。しかし、あなたがしようとしていることは、これまでの提案を補完するものだと思います。

あなたがしなければならないことは、単一のイベントリスナーを使用することです。datasnapshotがnullでない場合、値が存在します。キーはあなたが必要なIDを照会です:

DatabaseReference root = FirebaseDatabase.getInstance.getReference(); 
DatabaseReference reference = root.child("Test").oderByChild("ID").equalsTo(someId); 

reference.addSingleValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnaphot != null) { 
     //This means the value exist, you could also dataSnaphot.exist() 
     } 
    } 
    //More auto generated code 
); 

クエリが複数の結果と一致する可能性があるためdataSnapshotは、あなたのオブジェクトの束です。現在のIDが102である場合

public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnaphot != null) { 
      for (DataSnapshot children : dataSnaphot.getChildrens()) { 
       YourModel yourModel = children.getValue(YourModel.class); 
      } 
      } 
     } 
2

これを達成するために、私はあなたがuserIdsという名前の別のノードを作成してお勧めします。新しいユーザーが作成されるたびに、この新しいセクションにユーザーIDを追加するだけです。この新しいセクションでは、次のようになります。

Firebase-root 
    --- userIds 
     --- Id101: true 
     --- Id102: true 

それからちょうどこの新しいノードのノード上のリスナーを入れて、dataSnapshotオブジェクトのexists()メソッドを使用します。

+0

にそれを変更することはできません:あなたは、各の値が必要な場合には、その中に繰り返すことができますしかし、なぜ存在するメソッドのデータベースルールを作成しないのですか? –

+0

これは最も簡単な方法です。 –

+0

IDはユーザーに接続されますか? –

関連する問題