获得W / ClassMapper:在课堂上找不到XXX的设置器/字段

时间:2019-03-24 03:46:27

标签: android firebase android-recyclerview recycler-adapter

我在Firebase json树中,游戏的父节点(GID)下的每个孩子都遇到此错误。

该错误消息是针对AwayTeam,HomeTeam,AwayScore,HomeScore等的。。。它好像没有正确映射任何内容!?

firebase的结构如下:

Games
    --- GID
        ----- AwayTeam
        ----- HomeTeam
        ----- AwayScore
        ----- HomeScore
              etc...

我的适配器文件如下:

public class PoolAdapter extends RecyclerView.Adapter<PoolAdapter.PoolViewHolder> {

    public PoolAdapter(Dashboard dashboardFragment, String userID) {

        this.mDashboardFragment = dashboardFragment;

        mPoolRef = FirebaseDatabase.getInstance().getReference();

        playerInPoolRef = mPoolRef.child("PlayerInPool").child(userID).orderByValue().equalTo(true);

        playerInPoolRef.addValueEventListener(new PlayersInPoolChildEventListener());

    }

    private class PlayersInPoolChildEventListener implements ValueEventListener {

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                getPoolData(dataSnapshot);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {}

    }


    private void getPoolData(DataSnapshot dataSnapshot) {

        for(DataSnapshot snapshot: dataSnapshot.getChildren()) {

            String poolID = snapshot.getKey();

            poolRef = mPoolRef.child("Pools").child(poolID);

            poolRef.addListenerForSingleValueEvent(new ValueEventListener() {

                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    getGameData(dataSnapshot);

                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {}

            });

        }

    }

    private void getGameData(DataSnapshot dataSnapshot) {

        String gameID = dataSnapshot.child("GameId").getValue().toString();

        gameRef = mPoolRef.child("Games").child(gameID);

        gameRef.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                loadPlayerDashboard(dataSnapshot);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {}

        });

    }

    private void loadPlayerDashboard(DataSnapshot dataSnapshot) {

        Log.d(TAG, "*** Database snapshot: " + dataSnapshot); <-- Displays the correct Firebase information

        Pools pool = dataSnapshot.getValue(Pools.class);

        mPools.add(pool);
        Collections.sort(mPools);

    }

}

我的Model类对象如下:

public class Pools implements Comparable<Pools> {

    private String _poolID;
    //
    private String _poolName;
    private String _poolPassword;

    private String _gameID;
    private String _awayTeam;
    private String _homeTeam;

    private String _gameTime;
    private String _gameDate;

    public Pools() { }

    public Pools(String poolID, String poolName, String gameID, String awayTeamName, String homeTeamName, String gameDate, String gameTime) {

        this._poolID = poolID;
        this._poolName = poolName;
        //
        this._gameID = gameID;
        this._awayTeam = awayTeamName;
        this._homeTeam = homeTeamName;

        this._gameDate = gameDate;
        this._gameTime = gameTime;

    }

    public String get_poolID() {
        return _poolID;
    }

    public void set_poolID(String _poolID) {
        this._poolID = _poolID;
    }

    public String get_poolName() {
        return _poolName;
    }

    public void set_poolName(String _poolName) {
        this._poolName = _poolName;
    }

    public String get_poolPassword() {
        return _poolPassword;
    }

    public void set_poolPassword(String _poolPassword) {
        this._poolPassword = _poolPassword;
    }

    public String get_gameID() {
        return _gameID;
    }

    public void set_gameID(String _gameID) {
        this._gameID = _gameID;
    }

    public String get_awayTeam() {
        return _awayTeam;
    }

    public void set_awayTeam(String _awayTeam) {
        this._awayTeam = _awayTeam;
    }

    public String get_homeTeam() {
        return _homeTeam;
    }

    public void set_homeTeam(String _homeTeam) {
        this._homeTeam = _homeTeam;
    }

    public String get_gameTime() {
        return _gameTime;
    }

    public void set_gameTime(String _gameTime) {
        this._gameTime = _gameTime;
    }

    public String get_gameDate() {
        return _gameDate;
    }

    public void set_gameDate(String _gameDate) {
        this._gameDate = _gameDate;
    }

}

其中包含所有获取器和设置器,所以我不确定为什么会出错!

我知道数据在那里,因为您在适配器中上面看到的log log语句显示以下内容: *** Database snapshot: DataSnapshot { key = 2019020300, value = {HomeTeam=Los Angeles Rams, GSIS=57833, GameYear=2019, isPlayed=true, hBackground=hTeam/rams.png, HomeId=29, hScore=0, GameTime=6:30, AwayId=31, aBackground=aTeam/patriots.png, SportID=1, aScore=0, Qtr=Pregame, WeekId=22, GameDate=20190203, AwayTeam=New England Patriots, SeasonType=SB} }

有人知道我该如何解决!!

1 个答案:

答案 0 :(得分:0)

您需要遍历dataSnapshot.getChildren(

            for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                Pools pool = childSnapshot.getValue(Pools.class);
             }