Попытка использовать идентификатор документа Firebase для обработки значения определенного поля в AndroidStudio - PullRequest
0 голосов
/ 14 апреля 2020

Сейчас у меня есть рабочий код для получения DocumentReference из базы данных Firestore по id. Я пытаюсь затем выполнить команду .get () для обработки определенного поля из документа, и ничего не происходит. Вот мой код:

FirebaseFirestore mFirestore = FirebaseFirestore.getInstance();
DocumentReference docRef = mFirestore.collection(collection).document(doc_key);
Log.d("LOGGER", "docRefID is:" + docRef.getId());
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        Log.d("LOGGER", "task complete");   // this is never being called
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document != null) {
                Log.d("LOGGER", "Got in here");
                foo(document.getString(myField));  // this is where I'm trying to do things, but its not getting here
            } else {
                Log.d("LOGGER", "No such document");
            }
        } else {
            Log.d("LOGGER", "get failed with ", task.getException());
        }
    }
});
while( // foo has not been called yet ) {
    Log.d("LOGGER", "still waiting");
    Thread.sleep(2000);
}

Вот мой вывод logcat:

2020-04-13 13:55:47.449 24669-24669/com.example.myurbanflix D/LOGGER: docRefID is:nNuztOjrN0kz53XTmCS1
2020-04-13 13:55:47.450 24669-24669/com.example.myurbanflix D/LOGGER: still waiting
2020-04-13 13:55:49.452 24669-24669/com.example.myurbanflix D/LOGGER: still waiting
2020-04-13 13:55:51.452 24669-24669/com.example.myurbanflix D/LOGGER: still waiting

Когда я запускаю программу, я правильно вижу идентификатор моего DocumentReference, и это значение идентификатора документ, который я пытаюсь запросить, но ни одно из других сообщений журнала не появляется. Похоже, что задача никогда не завершается, потому что ни одно из этих внутренних сообщений журнала не появляется, и мое время l oop внизу просто продолжает пинговать logcat каждые две секунды. Я также должен отметить для контекста, что я пытаюсь сделать это внутри FirestoreAdapter для использования в RecyclerView. Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 14 апреля 2020

Добро пожаловать! Приятно, что вы на борту!

Я не смог найти ни одной ссылки на эту проблему, однако, глядя на общую концепцию асинхронного программирования, я думаю, что эта бесконечная while l oop блокирует основной шаг вашего код. Поскольку l oop является полностью синхронным, он заблокирует основной шаг. Асинхронный код не может вернуть результаты в основной шаг.

Вы можете попытаться найти асинхронные методы для задержки (я пытался найти его в Google, и их много). Однако я предлагаю удалить l oop, поскольку это должно работать достаточно быстро.

Надеюсь, это поможет!

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