将Java映射返回到其他类

时间:2019-03-02 21:46:25

标签: java android firebase firebase-realtime-database hashmap

我的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;

1 个答案:

答案 0 :(得分:4)

我不是Android开发人员,但是通过查看您的代码,我注意到您将 listener 附加到DatabaseReference实例。在ValueEventListener中,您putFirebase提取值。

可能发生的情况是,不是立即调用此 listener ,而是以异步方式调用。这意味着您的getUserInfo方法被允许独立于onDataChange方法执行而返回。

这可能会导致您的Map<String, String>返回后为空。