Как я могу узнать, что это конец 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);
}
});
}