java - Spinner 无法与 Firestore 的 document.getId 配合良好

标签 java android firebase spinner google-cloud-firestore

知道为什么这不起作用吗?

mFirestore.collection("DR1")
            .document(UserID)
            .collection("Story")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (DocumentSnapshot document : task.getResult()) {
                          spinnerArray.add(String.valueOf(document.getId()));  
                        }
                    } else {
                        Log.d(TAG, "Error getting documents: ", task.getException());
                    }
                }
            });

微调器下拉菜单有效(没有默认选择,只是空的),但在选择时,它也不会出现。没有任何错误。我在选择上将 setOnItemSelectedListener 设置为 Toast.maketext,但也没有出现任何内容。

但是一旦我添加:

spinnerArray.add("test"); 

在 Firestore 数据库调用(for 循环)之前,一切正常。 (下拉列表中默认选择“测试”,当我选择另一个条目时,会出现 Toast.maketext,并且选择会出现在微调器上)

再次感谢。

最佳答案

发生这种情况是因为您没有在 onComplete() 方法中定义 spinnerArray,该方法具有异步行为。要解决此问题,请将 spinnerArray 的声明移至 onComplete() 方法内。要显示记录,您还需要在方法内设置适配器。欲了解更多信息,请参阅我的回答 post 。我还建议您观看此视频, Asynchronous Firebase API - Cloud Firestore and Android ,以便更好地理解。

关于java - Spinner 无法与 Firestore 的 document.getId 配合良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233561/

相关文章:

java - Android - Firestore 使用 startAfter() 和 limit() 返回一个空查询

java - 可扩展抽屉导航不动

java - 如何通过配置设置 Tomcat 响应缓冲区大小?

java - Android dalvikvm-heap : Clamp target GC heap

android - 来自 Parcel.readException 的 NullPointerException(等)

android - 如何在 fragment 中更新 SQLite 数据库?安卓

android - 执行时 FireFox 4.0 的 Kiosk 模式

使用 cordova-plugin-fcm 通过 PhoneGap Build 进行 Firebase 推送通知

Java 对象类,构造函数链接

android - 如何将数据从 Firebase 检索到我的适配器