Android Firebase数据库 - 不适合从数据库结构转换对象

时间:2017-07-20 20:47:36

标签: java android firebase firebase-realtime-database

我的数据库结构如下:

users
    8aWcF6GQmpezfJkVnW5uYoJ2wtI3
        email: "jack"@mail.com"
        height: "180cm"
        imgUrl: "https://www.goldennumber.net/wp-content/uploads..."
        matches
            WEZ36bsEFXQtrJWQJVT3KMtsgQC3: true
            8oqmrMVZ57XXlunIAUEeBgKFZ0h2: true
        uid: "8aWcF6GQmpezfJkVnW5uYoJ2wtI3"
        username: "jack"

我正在尝试将此结构转换为此对象:

public class UserMatchDTO {
private String uid;
private String username;
private String height;
private String imgUrl;
private String email;
private HashMap<String, Boolean> userMatches = new HashMap<>();

public UserMatchDTO() {
}

public UserMatchDTO(String uid, String username, String height, String imgUrl, String email, HashMap<String, Boolean> userMatches) {
    this.uid = uid;
    this.username = username;
    this.height = height;
    this.imgUrl = imgUrl;
    this.email = email;
    this.userMatches = userMatches;
}

public String getUid() {
    return uid;
}

public String getUsername() {
    return username;
}

public String getHeight() {
    return height;
}

public String getImgUrl() {
    return imgUrl;
}

public HashMap<String, Boolean> getUserMatches() {
    return userMatches;
}

public void setUserMatches(HashMap<String, Boolean> userMatches) {
    this.userMatches = userMatches;
}

public String getEmail() {
    return email;
}

}

这是我将其转换为我的对象的方法:

final List<UserMatchDTO> userMatchDTOs = new ArrayList<>();

databaseReference.child("users").addValueEventListener(new 
ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot matchSnapshot : dataSnapshot.getChildren()){
                UserMatchDTO userMatchDTO = matchSnapshot.getValue(UserMatchDTO.class);
                userMatchDTOs.add(userMatchDTO);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

但是,当我调试它时,userMatches HashMap总是大小为0.那么为什么来自“user”的子“匹配”不会转换为HashMap?

以下是快照的样子:

DataSnapshot { key = 8oqmrMVZ57XXlunIAUEeBgKFZ0h2, value = {email=jack@mail.com, height=180cm, uid=8aWcF6GQmpezfJkVnW5uYoJ2wtI3, imgUrl=https://www.goldennumber.net/wp-content/uploads/2013/08/florence-colgate-england-most-beautiful-face.jpg, username=jack, matches={WEZ36bsEFXQtrJWQJVT3KMtsgQC3=true, 8oqmrMVZ57XXlunIAUEeBgKFZ0h2=true}} }

1 个答案:

答案 0 :(得分:0)

好的,所以我设法解决这个问题,但我不确定这是否是一个好的解决方案。

我只是先将响应映射到Object,然后将其转换为HashMap。

@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot matchSnapshot : dataSnapshot.getChildren()){
                UserMatchDTO userMatchDTO = matchSnapshot.getValue(UserMatchDTO.class);

                Object object = matchSnapshot.child("matches").getValue();
                if(object != null){
                    userMatchDTO.setUserMatches((HashMap<String, Boolean>) object);
                }

                userMatchDTOs.add(userMatchDTO);
            }

对此有更好的解决方案吗?