2017-07-20 9 views
0

私のデータベース構造はこのようなものです:アンドロイドFirebaseデータベースデータベース構造から適切ではないオブジェクトの変換が

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; 
} 

}

:私は、このオブジェクトには、この構造を変換しようとしています

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" 

これは私のオブジェクトに変換する方法です:

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"の子 "matches"がHashMapに変換されないのですか?ここで

は、スナップショットは、次のようになります。

DataSnapshot { key = 8oqmrMVZ57XXlunIAUEeBgKFZ0h2, value = {[email protected], 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}} } 

答えて

0

[OK]を、ので、私はこれを解決するために管理し、私はこれは良い解決策であるかどうかわからないです。

私はちょうど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); 
      } 

この問題を解決する方法はありますか?

関連する問題