首页 > 解决方案 > Firebase 数据未显示

问题描述

我已从 Firebase 检索到有关姓名和分数的数据。我能够看到检索到的数据的名字和分数的列表视图,但是对于检索到的第二个数据,我看不到任何分数或名称。当我调试应用程序时,我收到了这个“com.example.gymtastic.SquatScore(字段/设置器区分大小写!)”。

private ListView listView, listview2;
DatabaseReference databaseReference;
DatabaseReference ddatabase;
private FirebaseDatabase firebaseDatabase;
List<ScoreProfile> scoreList;
List<SquatScore> squatList;


@Override
protected void onStart() {
     super.onStart();
      ddatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

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

                    SquatScore squatScore = squatsnapshot.getValue(SquatScore.class);
                    squatList.add(squatScore);
                }
                SquatInfoAddapter squatInfoAddapter =new SquatInfoAddapter(RankT.this, squatList);
                listview2.setAdapter(squatInfoAddapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
               throw databaseError.toException();
            }
        }); // This one doesnt

    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rank_t);


        firebaseDatabase = FirebaseDatabase.getInstance();

        databaseReference = firebaseDatabase.getReference("Bench");

        ddatabase = firebaseDatabase.getReference("Squat");

        databaseReference.orderByChild("userScore").limitToFirst(5);
        ddatabase.orderByChild("userScore").limitToFirst(5);

        squatList = new ArrayList<>();

        scoreList = new ArrayList<>();

        firebaseAuth = FirebaseAuth.getInstance();

这是我的代码。显示第一个值侦听器,但对于创建的第二个值侦听器,它只显示空列表视图。

这是我正在检索但未显示的 Firebase 数据。

 "Squat" : {
    "Jn8SOKDgGRMewEHjVG8LaXoYtrl2" : {
      "suserName" : "ace",
      "suserScore" : "369"
    },
    "mooFelp2soMtDmRlg5IQ6AYpKhO2" : {
      "suserName" : "ACe",
      "suserScore" : "1222"
    }

这是我的 SquatScore 课程:

public class SquatScore {

    private String SuserName;
    private String SuserScore;
    public SquatScore(){};

    public SquatScore(String suserName, String suserScore) {
        SuserName = suserName;
        SuserScore = suserScore;
    }


    public String getSuserName() {
        return SuserName;
    }

    public String getSuserScore() {
        return SuserScore;
    }
}

标签: androidfirebasefirebase-realtime-database

解决方案


你得到的错误是:

W/ClassMapper:在类 com.example.gymtastic.SquatScore 上找不到 suserName 的设置器/字段(字段/设置器区分大小写!)“

如果我们看看你的课程是正确的:

  • 没有字段suserName,只有SuserName大写S
  • 对于名为 的属性没有 setter 方法,该属性userName将被调用setSusername

没有这些,Firebase SDK 无法知道如何将suserNameJSON 中的属性值设置到您的SquatScore对象上。

要解决此问题,您需要将该字段重命名为suserName,或创建 setter 方法。


推荐阅读