【问题标题】:How can I know it's the end of com.google.firebase.firestore.QuerySnapshot [duplicate]我怎么知道 com.google.firebase.firestore.QuerySnapshot 结束了 [重复]
【发布时间】: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


    【解决方案1】:

    似乎您应该在开始索引之前检查value.getDocuments() 返回的列表的大小。如果为零,请停止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-01
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多