2017-11-28 7 views
1

AndroidとFirebaseの使用を開始しました。私は簡単なテストFirebaseデータベースを構築しており、簡単なクエリを実行したいと思っています。ValueEventListenerを使用したクエリ

私はChildEventListenerを使用している場合、私はそれのための合理的な結果とコードを取得するには、次のようになります -

Query query = databaseReference.orderByChild("calendarGroup").equalTo("2"); 

    mChildEventListner = new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      CalendarEntry calendarEntry = dataSnapshot.getValue(CalendarEntry.class); 
      linesToDisplay = linesToDisplay + "\n" + calendarEntry.getCalendarDate() + 
        ", " + calendarEntry.getCalendarEntry() + 
        ", " + calendarEntry.getCalendarGroup(); 
      resultText.setText(linesToDisplay); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

      Toast mToast = Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT); 
      mToast.show(); 
      ; 
     } 
    }; 

    query.addChildEventListener(mChildEventListner); 

しかし、これは、単一のイベントクエリであると、私はSingleValueListenerを使用していることをやってみたかったです。コードは以下の通りです: -

 Query query = databaseReference.orderByChild("calendarGroup").equalTo("2"); 

    ValueEventListener mValueEventListener; 

    mValueEventListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      CalendarEntry calendarEntry = dataSnapshot.getValue(CalendarEntry.class); 
      linesToDisplay = linesToDisplay + "\n" + calendarEntry.getCalendarDate() + 
        ", " + calendarEntry.getCalendarEntry() + 
        ", " + calendarEntry.getCalendarGroup(); 
      resultText.setText(linesToDisplay); 

     } 
     @Override 
     public void onCancelled (DatabaseError databaseError){ 
     } 


    }; 

    query.addListenerForSingleValueEvent(mValueEventListener); 

私は間違っていますか?

mValueEventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot data : dataSnapshot.getChildren()){ 

     CalendarEntry calendarEntry = data.getValue(CalendarEntry.class); 
     linesToDisplay = linesToDisplay + "\n" + calendarEntry.getCalendarDate() + 
       ", " + calendarEntry.getCalendarEntry() + 
       ", " + calendarEntry.getCalendarGroup(); 
     resultText.setText(linesToDisplay); 

    } 
    } 
    @Override 
    public void onCancelled (DatabaseError databaseError){ 
    } 


}; 
query.addListenerForSingleValueEvent(mValueEventListener); 

データを取り出すことができるようにforループを追加してください:

+0

これらのコード部分をアクティビティのどの部分に追加しますか? –

+0

私は、MainActivityのOnCreateで作成されたボタンに対して、OnClickListenerから使用しています。 – drodic

答えて

0

これを実行してください。

ValueEventListenerでは、ループなしで値を取得できるchildeventlistenerと異なるノード内でループする必要があります。

+0

さあ、ありがとう - それは動作します! – drodic