3

私はアンドロイドアプリケーションのrecyclerviewでfirebaseからデータを取得しようとしています。私が参照している "boardz"ノードのオブジェクトには2つの子プロパティがあります。それらのプロパティはそれぞれ複数の子プロパティを持ちます。Firebaseに格納された「配列」オブジェクトをPOJOに変換する

{ 
"game" : { 
"boardz" : { 
    "-KTaL6V06e3SkEAvfU_3" : { 
    "hostData" : { 
     "hostId" : "MUC6gtRqInRQmqxe7khlmrAbjVZ2", 
     "ownerAddress" : "n3b9t3vDR6Yiot4HwxwZoa7vxZBiAKReeH", 
     "secretString" : "derp-a-derp" 
    }, 
    "metadata" : { 
     "across" : [ 2, 0, 5, 9, 7, 8, 1, 4, 3, 6 ], 
     "awayTeam" : "ATL", 
     "boardFeeBTC" : "", 
     "boardFeeUSD" : 14, 
     "collectionAddress" : "2NEPnGPyvy9F5N4W4CjhLNPZLwTFNSAzjAL", 
     "down" : [ 1, 6, 8, 7, 3, 5, 2, 0, 9, 4 ], 
     "endTime" : "2016-10-09T22:09:39.807Z", 
     "homeTeam" : "DEN", 
     "q1AwayScore" : "", 
     "q1HomeScore" : "", 
     "q1WinnerAddress" : "", 
     "q2AwayScore" : "", 
     "q2HomeScore" : "", 
     "q2WinnerAddress" : "", 
     "q3AwayScore" : "", 
     "q3HomeScore" : "", 
     "q3WinnerAddress" : "", 
     "q4AwayScore" : "", 
     "q4HomeScore" : "", 
     "q4WinnerAddress" : "", 
     "startTime" : "2016-10-08T22:09:39.807Z", 
     "winnersPaid" : false 
    } 
    }, 
    "-KTaP0-GPSCwCDA8BUlt" : { 
    "hostData" : { 
     "hostId" : "MUC6gtRqInRQmqxe7khlmrAbjVZ2", 
     "ownerAddress" : "mtLF8hks46i9DbSK1tBpenYMDsHpTbnuwC", 
     "secretString" : "do-diddly-doo" 
    }, 
    "metadata" : { 
     "across" : [ 9, 1, 6, 8, 0, 2, 4, 7, 3, 5 ], 
     "awayTeam" : "BUF", 
     "boardFeeBTC" : "", 
     "boardFeeUSD" : 25, 
     "collectionAddress" : "2N5VgMfKwCtJaiT4CLVAMvMQUG6PTbreY4z", 
     "down" : [ 9, 2, 4, 3, 7, 0, 5, 6, 8, 1 ], 
     "endTime" : "2016-10-09T22:26:47.467Z", 
     "homeTeam" : "LA", 
     "q1AwayScore" : "", 
     "q1HomeScore" : "", 
     "q1WinnerAddress" : "", 
     "q2AwayScore" : "", 
     "q2HomeScore" : "", 
     "q2WinnerAddress" : "", 
     "q3AwayScore" : "", 
     "q3HomeScore" : "", 
     "q3WinnerAddress" : "", 
     "q4AwayScore" : "", 
     "q4HomeScore" : "", 
     "q4WinnerAddress" : "", 
     "startTime" : "2016-10-08T22:26:47.467Z", 
     "winnersPaid" : false 
    } 
    } 
}, 

は、私は、ネストされたデータを取得するためのPOJOを作成するには、この答え How to represent nested data in Firebase class を使用し、クラスは、部分的に取り組んでいます:

はFirebase JSONとPOJOを更新しました。

私が抱えている問題は、データベースから配列データを取り出す方法を説明していないことです。 (オブジェクトのリストではなく、単純な整数の配列データです)、child2 pojoにfirebaseのデータが移入されていません。

hostData pojoは、firebaseの子ノードに正常にマップされます。すべてのhostDataのプロパティはStringsなので、マッチさせるのが簡単だと思います。

metaDataは、最初のプロパティとして配列を持ちます。

hereで説明されているように、firebaseはjsonオブジェクトとして配列を格納しています。これらの「配列」オブジェクトをJavaリストまたはArrayListに変換して、metaDataのpojoに値が設定されるようにする必要があります。

firebaseノードに格納されている配列データをpojoとしてどのように表現しますか?

オブジェクトをどのように作成し、属性をマップしたかを確認するためにpojoを追加しました。たぶん私は何かを逃した。

public class Board { 

private HostData hostData;//this class maps to the firebase json 
private MetaData metaData;//this class isn't mapping to any of the json properties. 

public Board() { 
} 

public Board(HostData hostData, MetaData metaData) { 
    this.hostData = hostData; 
    this.metaData = metaData; 
} 

public HostData getHostData() { 
    return hostData; 
} 

public MetaData getMetaData() { 
    return metaData; 
} 
//the hostData class works fine 
public static class HostData { 

    private String hostId; 
    private String ownerAddress; 
    private String secretString; 

    public HostData() { 
    } 

    public HostData(String hostId, String ownerAddress, String secretString) { 
     this.hostId = hostId; 
     this.ownerAddress = ownerAddress; 
     this.secretString = secretString; 
    } 

    public String getHostId() { 
     return hostId; 
    } 

    public String getOwnerAddress() { 
     return ownerAddress; 
    } 

    public String getSecretString() { 
     return secretString; 
    } 
} 
//this class is giving me hell. Am I missing something? 
public static class MetaData { 

    private List<Long> across = new ArrayList<>(); 
    private String awayTeam; 
    private Double boardFeeBTC; 
    private Double boardFeeUSD; 
    private String collectionAddress; 
    private List<Long> down = new ArrayList<>(); 
    private String endTime; 
    private String homeTeam; 
    private Long q1AwayScore; 
    private Long q1HomeScore; 
    private String q1WinnerAddress; 
    private Long q2AwayScore; 
    private Long q2HomeScore; 
    private String q2WinnerAddress; 
    private Long q3AwayScore; 
    private Long q3HomeScore; 
    private String q3WinnerAddress; 
    private Long q4AwayScore; 
    private Long q4HomeScore; 
    private String q4WinnerAddress; 
    private String startTime; 
    private Boolean winnersPaid; 

    public MetaData() { 
    } 

    public MetaData(List<Long> across, String awayTeam, Double boardFeeBTC, Double boardFeeUSD, String collectionAddress, List<Long> down, String endTime, String homeTeam, Long q1AwayScore, Long q1HomeScore, String q1WinnerAddress, Long q2AwayScore, Long q2HomeScore, String q2WinnerAddress, Long q3AwayScore, Long q3HomeScore, String q3WinnerAddress, Long q4AwayScore, Long q4HomeScore, String q4WinnerAddress, String startTime, Boolean winnersPaid) { 
     this.across = across; 
     this.awayTeam = awayTeam; 
     this.boardFeeBTC = boardFeeBTC; 
     this.boardFeeUSD = boardFeeUSD; 
     this.collectionAddress = collectionAddress; 
     this.down = down; 
     this.endTime = endTime; 
     this.homeTeam = homeTeam; 
     this.q1AwayScore = q1AwayScore; 
     this.q1HomeScore = q1HomeScore; 
     this.q1WinnerAddress = q1WinnerAddress; 
     this.q2AwayScore = q2AwayScore; 
     this.q2HomeScore = q2HomeScore; 
     this.q2WinnerAddress = q2WinnerAddress; 
     this.q3AwayScore = q3AwayScore; 
     this.q3HomeScore = q3HomeScore; 
     this.q3WinnerAddress = q3WinnerAddress; 
     this.q4AwayScore = q4AwayScore; 
     this.q4HomeScore = q4HomeScore; 
     this.q4WinnerAddress = q4WinnerAddress; 
     this.startTime = startTime; 
     this.winnersPaid = winnersPaid; 
    } 

    public List<Long> getAcross() { 
     return across; 
    } 

    public String getAwayTeam() { 
     return awayTeam; 
    } 

    public Double getBoardFeeBTC() { 
     return boardFeeBTC; 
    } 

    public Double getBoardFeeUSD() { 
     return boardFeeUSD; 
    } 

    public String getCollectionAddress() { 
     return collectionAddress; 
    } 

    public List<Long> getDown() { 
     return down; 
    } 

    public String getEndTime() { 
     return endTime; 
    } 

    public String getHomeTeam() { 
     return homeTeam; 
    } 

    public Long getQ1AwayScore() { 
     return q1AwayScore; 
    } 

    public Long getQ1HomeScore() { 
     return q1HomeScore; 
    } 

    public String getQ1WinnerAddress() { 
     return q1WinnerAddress; 
    } 

    public Long getQ2AwayScore() { 
     return q2AwayScore; 
    } 

    public Long getQ2HomeScore() { 
     return q2HomeScore; 
    } 

    public String getQ2WinnerAddress() { 
     return q2WinnerAddress; 
    } 

    public Long getQ3AwayScore() { 
     return q3AwayScore; 
    } 

    public Long getQ3HomeScore() { 
     return q3HomeScore; 
    } 

    public String getQ3WinnerAddress() { 
     return q3WinnerAddress; 
    } 

    public Long getQ4AwayScore() { 
     return q4AwayScore; 
    } 

    public Long getQ4HomeScore() { 
     return q4HomeScore; 
    } 

    public String getQ4WinnerAddress() { 
     return q4WinnerAddress; 
    } 

    public String getStartTime() { 
     return startTime; 
    } 

    public Boolean getWinnersPaid() { 
     return winnersPaid; 
    } 
} 
} 
+0

ログを追加できますか?また、ラッパークラスの代わりにリテラルを使用してみてください。 "across"はint ArrayListです。おそらく、Gsonを使用してポーズをjsonにシリアル化して逆シリアル化することができます。 – Rohan

答えて

2

小さなタイプミスのようです。データベースのキーは、POJOクラスのキーと一致する必要があります(大文字と小文字が区別されます)。

public class Board { 
    public HostData hostData; 
    @PropertyName("metadata") 
    public MetaData metaData; // make sure the field is in public 

    ... constructor, getter, setter 
} 
+0

それはそれでした。私はどうやってそれを見落としたか分かりません。 – kreshendo

+0

ちょうどこれについて確かめるために、クラス名はfirebaseと同じであってはいけません。 @Wilik –

+1

@PeterHaddadはいそれはクラスの名前ではいいですが、プロパティではありません:) – Wilik

3

public class Board { 
    private HostData hostData; 
    private MetaData metadata; // change to this 

    ... constructor, getter, setter 
} 

またはこの設定に移動 - >プラグイン - > [参照リポジトリ - > SERCH RoboPOJOgenerator。そして、thisの文書に従ってください。

関連する問題