在app onStop / OnResume

时间:2018-05-18 16:55:56

标签: android firebase interface callback google-cloud-firestore

我有一个运行对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());
                }
            }); 
    }
} 

非常感谢任何帮助/见解。

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在使用addSnapshotListener()的活动范围形式。当调用第一个参数时传递的onStop()方法时,将自动删除侦听器。

如果您希望在活动在后台时监听器保持活动状态,请从activity的呼叫中删除addSnapshotListener()。否则,请将firebaseGetBooks.readDataRTUpdate()的来电从onCreate()移至onStart()