java - Firebase Cloud Firestore:查询未更新 Android 中的 ArrayList
问题描述
我正在使用以下查询:
db.collection("Example")
.whereEqualTo("UserId", currentUser.getUid())
.orderBy("timestamp", Query.Direction.ASCENDING)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()){
for (QueryDocumentSnapshot document : task.getResult()){
Log.i(TAG, "onComplete: " + document.get("UserId") + " => " + document.get("userText"));
userIdArrayList.add(document.get("UserId").toString());
userTextArrayList.add(document.get("userText").toString());
}
}else{
Log.i(TAG, "onComplete: Error getting documents", task.getException());
}
}
});
由于查询正在遍历结果,我希望它将结果添加到数组中。但是,当我运行代码并尝试打印数组列表的内容时,IndexOutOfBounds
尽管我查看了userTextArrayList.get(0);
哪个应该包含结果,但我还是遇到了异常。我已添加该行Log.i
以检查代码是否成功运行,并且我可以在 Logcat 中看到正在从数据库中提取数据。由于某种原因,此代码没有将结果添加到 ArrayList。
我不确定还有什么可以尝试的,而且我无法在文档中找到任何可以帮助我解决可能出错的地方。
如果提供答案太麻烦,请随时向我指出可以帮助解决问题的文档。我感谢任何人可以提供的任何指导。
谢谢!
编辑:我在以下代码行中收到错误:
userIdArrayList.add(document.get("UserId").toString());
userTextArrayList.add(document.get("userText").toString())
由于某种原因,这些行没有将数据添加到数组中,当我稍后尝试在代码中打印数组时(即Log.i(TAG, "User Text => userTextArrayList.get(0).toString());
),我收到并出错IndexOutOfBounds
- 尽管上面的代码添加了数据,但 ArrayList 显然不包含数据到 ArrayLists。
解决方案
userTextArrayList
您需要了解此查询是异步的,执行此日志语句时可能尚未添加结果Log.i(TAG, "User Text => userTextArrayList.get(0).toString());
此日志语句需要onComplete()
如下所示才能正常工作:
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.i(TAG, "onComplete: " + document.get("UserId") + " => " + document.get("userText"));
userIdArrayList.add(document.get("UserId").toString());
userTextArrayList.add(document.get("userText").toString());
}
yourButton.setEnabled(true);
} else {
Log.i(TAG, "onComplete: Error getting documents", task.getException());
yourButton.setEnabled(false);
}
}
推荐阅读
- swift - 在 swift 4.1 中将字符串转换为双精度
- c++ - 导入的库函数可以在内存中移动吗
- pandas - 如何计算列中更改了多少次
- java - 在 LeanFT 中最大化浏览器窗口
- python - 无法在 Windows 中更改默认 python 版本
- push-notification - Service Worker 中的推送支持是否依赖于 Internet 和第三方 Google/Apple 服务?
- python - 在 digitalocean Ubuntu 16.04 中安装新版本的 Python 后无法运行 Django 控制台
- jenkins - 在 Windows 的 ubuntu 子系统上运行 jenkins
- r - 打印长代码块R markdown pdf
- javafx - 导出到 jar 文件时,JavaFX 应用程序未加载 fxml 文件