我的Android应用程序中有一个实用程序类,用于保存在整个应用程序中重复使用的功能。其中一个函数返回当前已登录用户信息的Map。当我从活动中调用此函数时,我没有收到任何错误,但地图似乎是空的。
下面是实用程序类方法
public static Map<String,String> getUserInfo(String uniqueID)
{
final Map<String, String> currUserInfo = new HashMap<>();
final DatabaseReference database =
FirebaseDatabase.getInstance().getReference().child("Users").child(uniqueID);
database.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
User user = dataSnapshot.getValue(User.class);
currUserInfo.put("user_firstname",user.getFirstName());
currUserInfo.put("user_secondname", user.getSecondName());
currUserInfo.put("user_username", user.getUsername());
currUserInfo.put("user_profile", user.getProfilePicURL());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
Log.d(TAG, "onCancelled: " + databaseError.getMessage());
}
});
return currUserInfo;
}
下面是我如何调用函数
userInfo = Utilities.getUserInfo(userID);
“ userInfo”在活动顶部声明为
private Map<String, String> userInfo;
答案 0 :(得分:4)
我不是Android开发人员,但是通过查看您的代码,我注意到您将 listener 附加到DatabaseReference
实例。在ValueEventListener
中,您put
从Firebase
提取值。
可能发生的情况是,不是立即调用此 listener ,而是以异步方式调用。这意味着您的getUserInfo
方法被允许独立于onDataChange
方法执行而返回。
这可能会导致您的Map<String, String>
返回后为空。