java.util.HashMap无法强制转换为Object

时间:2017-08-21 11:12:54

标签: android firebase firebase-realtime-database

这是我的UserModel类

public class UserModel {

private String userName;
private String password;

public UserModel(String userName, String password) {
    this.userName = userName;
    this.password = password;
}

public String getUserName() {
    return userName;
}

public String getPassword() {
    return password;
}
}

这是我从firebase获取数据的方法

userReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            HashMap<String, UserModel> userModelHashMap = (HashMap<String, UserModel>) dataSnapshot.getValue();
            ArrayList<UserModel> userModelList = new ArrayList<>(userModelHashMap.values());
            if (userModelList.size() != 0) {
                Log.d(TAG, "onDataChange: " + userModelList.get(0));
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

它成功登录。

  

onDataChange:{password = abcde,userName = 1234}

在我想记录更多细节之前,一切似乎都没问题

Log.d(TAG, "onDataChange: " + userModelList.get(0).getUserName());

以下是我更改代码后此行的错误

  

java.lang.ClassCastException:java.util.HashMap无法强制转换为qklahpita.vn.testfirebasedemo.UserModel

我无法理解为什么getUserName()出错。如果 userModelList.get(0)没有返回UserModel,它会返回什么?

2 个答案:

答案 0 :(得分:6)

这是因为你得到的数据是&#39; HashMap&#39;而不是用户模型&#39;。您可以这样做来代替创建对象。

UserModel userModel = dataSnapshot.getValue(UserModel.class);

编辑:如果有多个用户,您还需要遍历子项。像这样。

for(Datasnapshot userSnapshot : dataSnapsot.getChildren(){
   UserModel userModel = userSnapshot.getValue(UserModel.class);
}

答案 1 :(得分:0)

当您将一个类设置为数据库,因为一个类为UserModel时,只会发布您设置的变量公共,而不是私有

私有:空值 公开:正确值