Как я могу узнать, что это конец com.google.firebase.firestore.QuerySnapshot - PullRequest
0 голосов
/ 13 мая 2018

Как я могу узнать, что это конец com.google.firebase.firestore.QuerySnapshot? (среда: Android-студия 3.1.2)

Метод nextFirestore() - каждый раз запрашивать 20 сообщений. showPosts() метод покажет запрос сообщения по одному. В 20-м посте showPosts() даст пользователю диалог "продолжать или нет" Если пользователь ответит да, то снова вызовите метод nextFirestore().

Все прошло хорошо, пока в конце постов. приложение зависнет, оно говорит:

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.google.appName, PID: 27564 java.lang.ArrayIndexOutOfBoundsException: length = 0; Индекс = -1 на java.util.ArrayList.get (ArrayList.java:439) на com.google.appName.Post $ 2.onEvent (Post.java:208) на com.google.appName.Post $ 2.onEvent (Post.java:188) на com.google.firebase.firestore.zzg.onEvent (неизвестный источник: 1789) на com.google.firebase.firestore.g.zzh.zza (SourceFile: 28) на com.google.firebase.firestore.g.zzi.run (неизвестный источник: 6) на android.os.Handler.handleCallback (Handler.java:790) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6494) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)

public void nextFirestore(DocumentSnapshot lastVisible)
    {
CollectionReference questionRef = db.collection("posts");
        mQuery = questionRef.startAfter(lastVisible)
                .limit(20);

        mRegistration = mQuery.addSnapshotListener(new EventListener<QuerySnapshot>()
        {
            @Override
            public void onEvent(@Nullable QuerySnapshot value,
                                @Nullable FirebaseFirestoreException e)
            {
                if (e != null)
                {
                    Log.w(TAG, "Listen failed.", e);
                    return;
                }
                List<Posts> realtimeList = new ArrayList<>();
                for (DocumentSnapshot doc : value)
                {
                    Posts post = doc.toObject(Posts.class);
                    assert post != null;
                    post.postId = doc.getId();
                    realtimeList.add(question);
                }

                DocumentSnapshot lastVisible = value.getDocuments().get(value.size() -1);
                Log.d(TAG, "next last visible: " + lastVisible);
                showPosts(realtimeList,lastVisible);



            }
        });
}

1 Ответ

0 голосов
/ 13 мая 2018

Похоже, что вы должны проверять размер списка, возвращаемого value.getDocuments(), прежде чем начать индексирование в нем.Если ноль, остановитесь.

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