这是我的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,它会返回什么?
答案 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时,只会发布您设置的变量公共,而不是私有。
私有:空值 公开:正确值