无法使用 firebase 从快照设置值

问题描述 投票:0回答:1

我正在尝试从 firebase 的快照中设置对象的值。不知何故,它只设置了该对象 3 个值中的 1 个。

这是我的目标

public class StudentDataClass {

    private String Name;
    private  String MSSV;

    private String dataImage;

    public String getName() {
        return Name;
    }

    public String getMSSV() {
        return MSSV;
    }

    public String getDataImage() {
        return dataImage;
    }

    public StudentDataClass(String name,String mssv, String dataImage) {
        this.Name = name;
        this.MSSV = mssv;
        this.dataImage = dataImage;
        //this.dataImage = (dataImage == null || dataImage.isEmpty()) ? "default_url_or_empty" : dataImage;
    }

    public StudentDataClass(){

    }
}
List<StudentDataClass> studentList;
studentList = new ArrayList<>();

这是数据库快照代码。

databaseReference = FirebaseDatabase.getInstance("https://android-app-eae36-default-rtdb.asia-southeast1.firebasedatabase.app").getReference("Students");

dialog.show();

eventListener = databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        studentList.clear();
        for (DataSnapshot itemShapshot: snapshot.getChildren()){
            StudentDataClass student = itemShapshot.getValue(StudentDataClass.class);
            studentList.add(student);
        }
        myAdapter.notifyDataSetChanged();
        dialog.dismiss();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        dialog.dismiss();
    }
});

对象获得了数据图像,但没有名称或 MSSV

这是我的数据库

java android firebase-realtime-database
1个回答
0
投票

为了能够将数据库中的属性值设置为 Java 类中的字段/属性,Firebase SDK 会查找与其名称和类型匹配的字段或 setter 方法。

由于

StudentDataClass
中没有 setter 方法,因此 SDK 将查看以下字段:
Name
MSSV
dataImage
。其中,只有
dataImage
的名称与数据库中的属性完全匹配 - 其他两个在数据库和代码之间具有不同的大小写。

您有几个选择:

  • 重命名数据库中的属性以匹配代码中的确切名称。
  • 重命名 Java 类中的字段以匹配数据库中的确切属性名称。
  • 将 setter 方法添加到 Java 代码中,因为
    setName
    实际上匹配数据库属性
    name
    ,并且
    setMssv
    匹配名为
    mssv
    的属性。
  • 在代码中使用
    PropertyName
    注释
    指定其映射到的属性名称。
© www.soinside.com 2019 - 2024. All rights reserved.