0

Firestoreにはこれがあります。Firebase:Firestore:Realtime Databaseで見つかったChildEventListenerに相当するもの

FirebaseFirestore db = FirebaseFirestore.getInstance(); 
     CollectionReference ref = db.collection("app/appdata/notifications"); 
     ref.addSnapshotListener((snapshot, e) -> { 
      if (e != null) { 
       Log.w(TAG, "Listen failed.", e); 
       return; 
      } 

      for (DocumentSnapshot x : snapshot.getDocuments()) { 
       System.out.println(x.getData()); 
      } 
     }); 

しかし、私はそのループを使用したくありませんが、代わりに新しい子のみを取得する必要があります。 Realtime Dbに見られるような、次のようなものが欲しいです。

ref.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 
     Post newPost = dataSnapshot.getValue(Post.class); 
     System.out.println("Author: " + newPost.author); 
     System.out.println("Title: " + newPost.title); 
     System.out.println("Previous Post ID: " + prevChildKey); 
    } 

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

    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) {} 

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

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

また、Firestoreでは、すべてのデータがドキュメント(基本的にキー値ストア)とコレクション(ドキュメントのコレクション)で構成されています。 Realtime DatabaseとFirestoreの両方には基本的な違いがあります。 –

答えて

0

これは私が達成した方法です。

まず、などDocumentReference INIT:

今すぐあなたのmDocRefを使用して
DocumentReference mDocRef = FirebaseFirestore.getInstance().document("yourData/notifications"); 

、このようなDocumentSnapshotのための新しいイベントリスナーを作成addSnapshotLisetener()を呼び出す:

mDocRef.addSnapshotListener(new EventListener<DocumentSnapshot>() { 
     @Override 
     public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) { 
      //todo your code 
     } 
    }); 

だから、これが初めてにあなたがあなたのデータをつかむだろう設定し、データが更新されるたびに設定してください。

また、アクティビティをコンテキストとして渡すと、アクティビティが停止すると自動的に切り離されます。

..addSnapshotListener(this, new EventListener<DocumentSnapshot>()... 
+0

ご参考までに、「sampleData/yourData/notifications」ではなく、「sampleData/yourData」を聞いています。 – Relm

+0

確かに編集しました –

+1

今、エラーが発生します。参照には奇数のパスが必要です。 – Relm

4

あなたは、最後のスナップショット以降に変更のリストを取得するにはQuerySnapshotオブジェクトに.getDocumentChanges()を使用する必要があります。これは、リアルタイムデータベースの子変更イベントに相当します。例:

FirebaseFirestore db = FirebaseFirestore.getInstance(); 
CollectionReference ref = db.collection("app/appdata/notifications"); 
ref.addSnapshotListener((snapshot, e) -> { 
    if (e != null) { 
     Log.w(TAG, "Listen failed.", e); 
     return; 
    } 

    for (DocumentChange dc : snapshots.getDocumentChanges()) { 
     switch (dc.getType()) { 
      case ADDED: 
       // handle added documents... 
       break; 
      case MODIFIED: 
       // handle modified documents... 
       break; 
      case REMOVED: 
       // handle removed documents... 
       break; 
      } 
     } 
    } 
}); 

詳細はhttps://firebase.google.com/docs/firestore/query-data/listen#view_changes_between_snapshotsを参照してください。

関連する問題