gpt4 book ai didi

java - 无法从从 Firebase 实时数据库检索数据的方法中获取返回值以在以下代码行中使用它

转载 作者:行者123 更新时间:2023-11-29 02:24:05 25 4
gpt4 key购买 nike

<分区>

我是 Firebase 实时数据库的新手。我正在开发一个 android 应用程序,它需要从 Firebase 实时数据库中检索数据。在大多数情况下,我都能够使用 Firebase 监听器方法检索数据,但有一次,我发现它无法以我想要的方式获取值(我认为是因为异步性质)。

场景:-

我在 Firebase 实时数据库中的数据结构如下:

评分:

database1

对于用户:

database2

我有一个单独的 java 类 (Suggest.java),它有一个简单的方法来获取用户列表(这里没有显示,因为它是基本实现)和下面定义的方法来从上面的评级节点检索数据一个列表:

public List<String> getMyUnratedPosts(final String currentUserId){
final List<String> currentUserUnratedPosts = new ArrayList<>();
DBRCurrentUnratedList = FirebaseDatabase.getInstance().getReference().child("adRat").child(currentUserId);
DBRCurrentUnratedList.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
AdRat adr = snapshot.getValue(AdRat.class);
int vr = adr.getViewRating();
if(vr < 1) {
currentUserUnratedPosts.add(adr.getAdId());
}
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}

});
return currentUserUnratedPosts;
}

上面定义的 AdRat 类只是一个具有与上面给出的数据库节点匹配的属性(以及 getter 和 setter)的类。

我正在我的 Activity 的 onCreate() 方法中创建此类 (Suggest.java) 的实例。然后我首先调用一个方法,在该方法中我只是获取用户列表(与上面获取评级的方法非常相似)。然后在我的 Activity 中的下一行代码中,我使用 for 循环从我获得的列表中获取每个用户,并将该 userId 用于上面显示的方法。例如,它将如下所示:

Suggest sj = new Suggest();
List<String> users = sj.getUsers();
for (final String mUser: users) {
//Just trying to use the user from above here
List<String> myUnratedItems = sj.getMyUnratedPosts(mUser);
Log.d(TAG, "list contains : " + myUnratedItems.toString());
}

问题:-

当我运行它时,我没有从代码中得到预期的结果。当我调试它时,我会得到用户列表的空值。我认为由于 firebase 方法是异步的,它们不会在下一行代码(那是我需要它的地方)准确地给出结果,而是稍后给出结果(但是程序已经运行了代码行我需要这些数据)。

我的总体需求:-

获取用户列表以在下一行代码中使用它(用于下一个方法)。

我已经在 Stackoverflow 中回答了几个与此相关的问题,但找不到确切的答案。

请解释为什么会发生这种情况以及任何解决方法....

附言: - 我是 stackoverflow 的新手,所以请容忍我在撰写问题时犯下的任何错误。谢谢。

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