gpt4 book ai didi

java - 如何从 ValueEventListener Firebase 检索数据

转载 作者:行者123 更新时间:2023-12-01 17:50:44 24 4
gpt4 key购买 nike

我有一个使用 Google Firebase 的 Android 应用。

我需要下载带有随机 ID 的图像。

我有一个函数必须返回随机图片的位图。在此函数中,我从单独的数据库条目中读取图片数量,然后生成一个范围从 1 到图片数量的随机 ID。这是代码:

    Random rand = new Random();
DatabaseReference amountRef = dbref.child("amount");
amountRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
amount = dataSnapshot.getValue(Long.class);

}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
long random = rand.nextLong() % amount + 1;

该函数稍后下载图像并生成并返回位图。问题在于监听器代码与其他代码和行并行执行

long random = rand.nextLong() % amount + 1;

产生除以零的错误,因为 amount 变量尚未更新。我也无法将所有代码放入 OnDataChange 中,因为我需要返回位图。请告诉我如何立即检索数据或从监听器内部返回位图。

最佳答案

您现在无法返回尚未加载的内容。换句话说,您不能简单地在 onDataChange() 方法之外使用 amount 对象,因为由于此方法的异步行为,它始终为 null方法。这意味着当您尝试在该方法之外使用该结果时,数据尚未完成从数据库的加载,这就是无法访问的原因。

解决此问题的一个快速解决方案是仅在 onDataChange() 方法内使用这些结果,或者如果您想在外部使用它,我建议您查看我的答案的最后部分<强> post 其中我解释了如何使用自定义回调来完成它。您还可以看看这个video 为了更好地理解。

关于java - 如何从 ValueEventListener Firebase 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50407338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com