java - 如何解决这个 Android Studio Firebase 问题?
问题描述
我正在尝试从 Firebase 获取数据到 bilgiler 变量。但我总是出错。我该如何解决这个问题?
Map<String, String> bilgiler = new HashMap<>();
db.collection("tarihBilgi")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
//Log.d("TAG", document.getId() + " => " + document.getData());
bilgiler.put("asdf", document.getData().toString());
}
} else {
Log.w("TAG", "Error getting documents.", task.getException());
}
}
});
Log.i("asdfads",(bilgiler.get("asdf")));
解决方案
数据从 Firebase 异步加载。现在你Log.i("asdfads",(bilgiler.get("asdf")));
在运行之前bilgiler.put("asdf", document.getData().toString())
运行,这就解释了为什么你看不到数据库中的值。
任何需要来自数据库的数据的代码,都需要在onComplete
方法内部,或者从那里调用。所以:
db.collection("tarihBilgi")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
bilgiler.put("asdf", document.getData().toString());
Log.i("asdfads",(bilgiler.get("asdf")));
}
} else {
Log.w("TAG", "Error getting documents.", task.getException());
}
}
});
另见:
推荐阅读
- winapi - 如何从 Win32 中的 NM_CUSTOMDRAW 消息中提取颜色?
- bash - 创建 Bash 脚本以提供登录用户(谁)的终端输出
- google-cloud-platform - Cloud Run 获取公共 URL
- r - 从 R 中运行终端命令:显示 SCP 传输的输出
- javascript - 如何避免在父组件状态更新时重新渲染循环中的所有子组件
- x86 - 当预取队列中只剩下 1 个字节时,8086 是否会启动 1 个字节的代码提取?
- heroku - Heroku Pipelines:来自 app.json 的配置被忽略
- serial-port - 树莓派-4;pl2303_read_int_callback - usb_submit_urb 失败,结果为 -1
- css - 无限流文字动画CSS
- c# - 将自动售货机界面构建为控制台应用程序但出现错误 - 无法将双精度值转换为布尔值