我有一个运行对Firestore的异步调用的类。我已经实现了一个接口和回调,所以我可以在类之外获取数据。我遇到的问题是,当我最小化/重新打开活动时,回调会停止接收数据。我测试了Firestore调用本身,并且肯定正在检索数据。似乎回调停止将数据从Firestore get()传递给Activity。
这是我的班级:
public class FirebaseGetBooks {
//firebase objects
private FirebaseFirestore mDbase;
private Activity activity;
private String groupID;
//default constructor
public FirebaseGetBooks() {
}
public FirebaseGetBooks(Activity activity) {
this.activity = activity;
//firebase new instances
mDbase = FirebaseFirestore.getInstance();
FirebaseGetGroupID firebaseGetGroupID = new FirebaseGetGroupID(activity);
groupID = firebaseGetGroupID.getGroupID();
}
public interface FirestoreCallback {
void onCallback(List<Book> books);
}
public void readDataRTUpdate(final FirestoreCallback firestoreCallback) {
mDbase.collection("books").whereEqualTo("groupID", groupID)
.addSnapshotListener(activity, new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
if (value != null) {
int i = 0;
List<Book> books = new ArrayList<>();
for (QueryDocumentSnapshot document : value) {
books.add(document.toObject(Book.class));
Log.d(TAG, "Book: " + books.get(i).toString());
i++;
}
firestoreCallback.onCallback(books);
Log.d(TAG, "Document updated.");
}
else {
Log.d(TAG, "No such document");
}
}
});
}
}
这是我的回调,如我的活动所示:
public class MainActivity extends AppCompatActivity {
private FirebaseGetbook firebaseGetBooks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
firebaseGetBooks = new FirebaseGetBooks(this);
firebaseGetBooks.readDataRTUpdate(new FirebaseGetBooks.FirestoreCallback() {
@Override
public void onCallback(List<Book> books) {
Log.d(TAG, "Books Still Firing: " + books.toString());
}
});
}
}
非常感谢任何帮助/见解。
谢谢!
答案 0 :(得分:0)
您正在使用addSnapshotListener()的活动范围形式。当调用第一个参数时传递的onStop()
方法时,将自动删除侦听器。
如果您希望在活动在后台时监听器保持活动状态,请从activity
的呼叫中删除addSnapshotListener()
。否则,请将firebaseGetBooks.readDataRTUpdate()
的来电从onCreate()
移至onStart()
。