gpt4 book ai didi

Android 回调不会在应用程序 onStop/OnResume 后再次运行

转载 作者:行者123 更新时间:2023-11-29 02:29:27 27 4
gpt4 key购买 nike

我有一个运行对 Firestore 的异步调用的类。我已经实现了一个接口(interface)和回调,所以我可以在类之外获取数据。我遇到的问题是,当我最小化/重新打开 Activity 时,回调停止接收数据。我测试了 Firestore 调用本身,并且确实正在检索数据。回调似乎停止将数据从 Firestore get() 传递到 Activity。

这是我的类(class):

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");
}
}
});
}

}

这是我在 Activity 中看到的回调:

    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());
}
});
}
}

任何帮助/见解将不胜感激。

谢谢!

最佳答案

您正在使用 addSnapshotListener() 的 Activity 范围形式.当调用作为第一个参数传递的 Activity 的 onStop() 方法时,监听器会自动移除。

如果您希望监听器在 Activity 处于后台时保持 Activity 状态,请从对 addSnapshotListener() 的调用中删除 activity。否则,将 firebaseGetBooks.readDataRTUpdate() 的调用从 onCreate() 移至 onStart()

关于Android 回调不会在应用程序 onStop/OnResume 后再次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50416058/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com