2017-03-28 33 views
1

firebaseからデータを取得する際に問題があります。私は1つのrootユーザーのノードを持っていて、そのrootの中に私は1つのuserID子ノードを持っています。その子ノードの中で、私はその血液群に従ってユーザ情報を保存しています。Firebaseからデータと特定のユーザデータを取得する方法

私が望むのは、血液型に応じて名前と電子メールを取得し、血液型がB +であるすべてのユーザーデータを取得することです。

また、firebaseのすべてのエントリを取得してtextViewに表示する方法について教えてください。

//show data on text view 
    datashow.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.i("inside click", "onClick: "); 
      FirebaseDatabase database = FirebaseDatabase.getInstance(); 
      DatabaseReference db = database.getReference(); 
      db.child("users").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        User user = dataSnapshot.getValue(User.class); 
        if (user == null) { 
         Log.e(TAG, "User data is null!"); 
         return; 
        } 
        Iterable<DataSnapshot > children = dataSnapshot.getChildren(); 
        Log.i("children", "onDataChange: " + children); 
        for(DataSnapshot child : children) 
        { 
         Map<String , String> map = (Map)child.getValue(); 
         Log.i("inside", "onDataChange: " + map); 
         name = map.get("name"); 
         email = map.get("email"); 
         dateof = map.get("userDob"); 
         showData(name , email , dateof); 
         Log.i("datasnap", "onDataChange: data snapshot " + name + email + dateof); 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 
    }); 

これはFirebaseデータベースのための私のスナップショット

enter image description here

+0

ちょうど「ここに画像の説明を入力します」をクリックすると、あなたがfirebaseデータのスナップショットが表示されます –

+0

あなたの質問でJSONツリーの画像へのリンクを含めました。実際のJSONをテキストとして置き換えてください。このテキストは[Firebaseデータベースコンソール](https://console.firebase.google.com/project/_/database/data/)の[Export JSON]リンクをクリックすることで簡単に取得できます。 。テキストは、それが検索可能になりとして、JSONを持つことは、私たちは簡単に実際のデータでテストし、私たちの答えでそれを使用するためにそれを使用することができますし、一般的にはちょうど[行うには良い事](https://meta.stackoverflow.com/です質問/ 285551 /なぜ私はアップロードできません - コードのオンの画像 - そのときに質問するとき/ 285557#285557)。 –

+1

@FrankvanPuffelenが –

答えて

0
db.child("users").orderByChild("userBloodGroup").equalTo("B+").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
      List<User> data = new ArrayList<>(); 
        if (dataSnapshot.exists()) { 
       for (DataSnapshot snapshot : 
         dataSnapshot.getChildren()) { 
        User element = snapshot.getValue(User.class); 
        element.setKey(snapshot.getKey()); 
        data.add(element); 

       } 
      for (User user: data){ 
Log.i(TAG,"user name: " +user.getName()); 
    Log.i(TAG,"user email: " +user.getEmail()); 
    Log.i(TAG,"user dob: " +user.getUserDob()); 
} 
       } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.i(TAG, "loadPost:onCancelled", databaseError.toException()); 
     } 

    }); 
+0

でJSONツリーが追加されますあなたの答えをありがとうございましたが、それは一つの問題メソッド「公共のボイドOnDataChangeの」を持つノーリターンを持っていません私は、あなたがエラーを与えているリスト「データを」戻ってきていると私は、ログ内の値として「ヌル」持っていると私はアプリをデバッグするとき、「userBloodGroupは、」私は答えを更新しました@rajatsingh NULL値 –

+0

は、あなたの答えのためにあなたに@Rihabに感謝、それは本当に私を助けてあなたの答えをありがとう、私は間違いなく私の質問 –

+0

を示している、まだタイプそれが今働くことを願っています:))あなたのユーザーエンティティにgettersとsetterを追加することを忘れないでください – Rihab

1

Firebaseクエリを使用し、bloodGroupのB +を持つすべてのユーザーを照会することです:

firebaseReference("users").orderByChild("userBloodGroup").equalTo("B+") 

すべて取得するにはユーザーのデータであれば、リスナーを使用してそれらのすべてを取得し、必要なTextViewに配置することができます。 Firebaseの文書でデータの読み方を確認することができます。 https://firebase.google.com/docs/database/android/read-and-write

関連する問題