2017-01-29 14 views
0

私は自分自身を趣味のアプリにしてFirebaseを試すことができました。このアプリのアイデアは、プレイリストにYouTubeのリンクを追加し、それをリモートクライアントが再生することです。私のデータは次のようになります。Firebaseの子供のプロパティに基づいてリストを照会する方法は?

各曲のidはユーチューブの動画IDから生成され、次のようにプレイ状況を持ってい
"songs" : { 
    "4sRxtvygyDo" : { 
    "playStatus" : 2, 
    "songtitle" : "Silent Alarm - Bloc Party (Full Album, High Quality)", 
    "thumbnail" : "https://i.ytimg.com/vi/4sRxtvygyDo/default.jpg", 
    "youtubeurl" : "https://www.youtube.com/watch?v=4sRxtvygyDo" 
    }, 
    "ht-nFq3DjP0" : { 
    "playStatus" : 2, 
    "songtitle" : "We Were Promised Jetpacks: These Four Walls (Full Album)", 
    "thumbnail" : "https://i.ytimg.com/vi/ht-nFq3DjP0/default.jpg", 
    "youtubeurl" : "https://www.youtube.com/watch?v=ht-nFq3DjP0" 
    }, 
    "xFWVFu2ASbE" : { 
    "playStatus" : 0, 
    "songaddedtime" : 1485642448454, 
    "songtitle" : "Totorro - Home Alone [Full Album]", 
    "thumbnail" : "https://i.ytimg.com/vi/xFWVFu2ASbE/default.jpg", 
    "youtubeurl" : "https://www.youtube.com/watch?v=xFWVFu2ASbE" 
    } 
} 

  • 0 =保留
  • 1 =遊ん
  • 2 =再生済み

クライアントは、新しい曲がプレイリストに追加されたことを知りたいので、このリストに、すべての更新でR以下のように0のプレイ状況ですべての曲をフィルタリングします。

playlistReference.addValueEventListener(new ValueEventListener() { 

    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot song : dataSnapshot.getChildren()) { 
      if (song.child("playStatus").getValue(Integer.class) == 0) { 
       songPlayer.playNext(song.getKey()); 
       break; 
      } 
     } 
    } 

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

リスナーはプレイリスト内の任意の項目を変更の通知を受け取ることになりますので、これはしかし、非常に非効率的である - これは使い方によっては非常に大きくなる可能性があります。それで、再生ステータス値が0に設定されている曲の変更のみをアプリに通知する方法はありますか?

私はdocumentationを調べましたが、私もthis old blog article that promised more powerful queries as an upcoming featureでしたが、これを行う方法はまだ見つかりませんでした。

答えて

3

あなたは使用したい:

playlistReference.orderByChild("playStatus").equalTo(0).add... 

これはFirebase documentation on queriesで覆われています。

は、クエリが実行されるように、add an index to your Firebase rulesにサーバー側を忘れないでください:

{ 
    "rules": { 
    "songs": { 
     ".indexOn": "playStatus" 
    } 
    } 
} 
+0

ああ、インデックスが欠落していたものです!タンク! – spacitron

関連する問題