私は自分自身を趣味のアプリにして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でしたが、これを行う方法はまだ見つかりませんでした。
ああ、インデックスが欠落していたものです!タンク! – spacitron