2017-09-08 10 views
1

私はfirebase auth uiを使ってメールとパスワードを持つユーザを作成していますが、登録後に私は自分のユーザ名を選択するために新しい活動に転送します。私の考えは、そのユーザー名が既に存在するかどうかを確認するためにDB全体を検索することでした。ここで私はこれを行うにしようとしていますどのようにされていないが、今まで運:全体のFirebaseデータベースを単一の値で検索する

submitBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d("UserName", "Click: "); 

       DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("USERS"); 
       mDatabase.orderByChild("username").equalTo("name1").addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for (DataSnapshot snapshot: dataSnapshot.getChildren()) { 
          //Here you can get all data 
          Log.d("UserName", "onDataChange: "+snapshot.toString()); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
      } 
     }); 

私もこの1試してみました:あなたのコードが動作していない唯一の理由がある

submitBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d("UserName", "Click: "); 

       DatabaseReference mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(); 
       Query query = mFirebaseDatabaseReference.child("USERS").orderByChild("username").equalTo("name1"); 

       ValueEventListener valueEventListener = new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
          //TODO get the data here 
          Log.d("UserName", "onDataChange: " + dataSnapshot.toString()); 
         } 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }; 
       query.addValueEventListener(valueEventListener); 

      } 
     }); 

Database Preview

+0

.equalTo(「NAME1」)を使用すると、NAME1は、あなたがチェックしたり、文字列変数であることを確認してくださいすることができますか? –

+0

その文字列、私はまだ動的に名前を確認する変数を追加していません。 – Nick

+1

DataSnapshot forループのこのString.valueOf(driverSnapshot.child( "username")。getValue())を試してください – Sunil

答えて

1

を"username"はUSERSテーブルの直接の子ではないためです。 あなたの直接の子供たちは、あなたがこのようChildEventListenerでトラフを繰り返すことができ、ランダムなIDを持つことになります。

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("USERS"); 
mDatabase.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) { 
     User user = dataSnapshot.getValue(User.class); // pojo 
     if(user.getUsername().equals("name1") { 
      // do something 
     } 

    } 
    ... 
) 
関連する問題