Обратный вызов Android больше не запускается после приложения onStop / OnResume - PullRequest
0 голосов
/ 18 мая 2018

У меня есть класс, который выполняет асинхронный вызов Firestore.Я реализовал интерфейс и функцию обратного вызова, чтобы я мог получать данные вне класса.Проблема, с которой я столкнулся, заключается в том, что, когда я минимизирую / снова открываю действие, обратный вызов прекращает получать данные.Я проверил сам вызов Firestore, и данные определенно извлекаются.Просто кажется, что обратный вызов прекращает передачу данных из get () Firestore в 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 голосов
/ 18 мая 2018

Вы используете форму с областью действия addSnapshotListener () .Слушатель автоматически удаляется при вызове метода onStop() действия, переданного в качестве первого параметра.

Если вы хотите, чтобы прослушиватель оставался активным, когда действие находится в фоновом режиме, удалите activity изпозвоните на addSnapshotListener().В противном случае переведите ваш вызов firebaseGetBooks.readDataRTUpdate() с onCreate() на onStart().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...