多くの関係子リスナーへFirebase多く:今アンドロイド - マイfirebaseデータベースは以下の構造を有する
tasks
- task_key_1:{
- name: "task 1"
- ...
- users{
user_key_1 : true
}
}
users
- user_key_1{
tasks{
task_key_1 : true
}
}
は、私が活動中で、ユーザーのタスクの一覧を表示したいと思います。私はこの方法を発見し、それが働いている: mytasksは/ユーザー/ユーザーID /タスク への参照であるとtaskReferenceは/ taskKeyOwnedByUser /タスクです:
myTasks.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
taskReference.child(dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
...
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, databaseError.toString());
}
});
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
taskReference.child(dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot taskSnapshot) {
......
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, databaseError.toString());
}
});
}
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
taskReference.child(dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot taskSnapshot) {
Log.w(TAG, "on child changed")
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, databaseError.toString());
}
});
});
}
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
Log.w(TAG, "onChildMoved");
}
@Override
public void onCancelled(DatabaseError error) {}
});
。
私の問題は、タスクの変更、つまりユーザーがタイトルを変更してリストUIを更新したときに、どのように変更を検出できますか? OnChildChanged内の "Log.w"は決して呼び出されないようです。
は、タイムスタンプ値にusers/<usersId>/tasks/<taskId>
の値の種類を変更する、これは私のアプローチで事前
ありがとう、私はそれを試してみます。私は疑問に思っていました。おそらく、firebaseによって作成された "標準"キーを使用してカスタマイズする方法があります。 – Spyga
@Spygaあなたはどんな鍵を意味していますか? task_keyまたは? – Wilik