【问题标题】:Returning a Java map to to a different class [duplicate]将Java映射返回到不同的类[重复]
【发布时间】:2019-07-24 14:10:01
【问题描述】:

我的 Android 应用程序中有一个实用程序类,用于保存在整个应用程序中重复使用的功能。其中一个函数返回当前登录用户信息的地图。当我从 Activity 调用此函数时,我没有收到任何错误,但 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”在活动顶部声明为this

   private Map<String, String> userInfo;

【问题讨论】:

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


    【解决方案1】:

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

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

    这可能会导致您的Map&lt;String, String&gt; 在返回后为空。

    【讨论】:

    • 感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多