【发布时间】:2018-05-12 22:00:28
【问题描述】:
我怎么知道com.google.firebase.firestore.QuerySnapshot 结束了?
(环境:Android studio 3.1.2)
nextFirestore()方法是每次查询20个帖子。
showPosts() 方法将一一显示查询帖子。
第20条showPosts()会给用户一个对话
“继续与否”
如果用户回答是,则再次调用nextFirestore() 方法。
一切都很顺利,直到帖子结束。 该应用程序将崩溃,它说:
E/AndroidRuntime: 致命异常: main 进程:com.google.appName,PID:27564 java.lang.ArrayIndexOutOfBoundsException:长度=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);
}
});
}
【问题讨论】:
标签: java firebase google-cloud-firestore