Firebase getValue(Class.class)对象

时间:2017-03-03 21:45:38

标签: android firebase

我正在尝试将Firebase中的数据导入到Object中,但它会为值返回null。

我的Firebase数据库如下:

- Reports
    - RandomID
        - Name: Bob
        - Value: x

我的报告类如下:

public class Report {
    private String name;
    private String value;


    public Report() {
    }

    public Report(String name, String value) {
        this.name= name;
        this.value= value;
    }

    public String getName() {
        return name;
    }

    public String getValue() {
        return value;
    }

    public void setName(String name) {
        this.name= name;
    }

    public void setValue(String value) {
        this.value= value;
    }

我有一个数据库addChildEventListener,在onChildAdded方法中我执行以下操作:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Reports");
mDatabase.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    Report currentReport = dataSnapshot.child(s).getValue(Report.class);
                    Log.d("CurrentReport", "Name: "currentReport.getName() + " Value: " + currentReport.getValue()));
                    Log.d("MyReports", dataSnapshot.getValue().toString());

currentReport.getName()getValue()返回null 但dataSnapshot.getValue().toString()正在返回:     {Name=Bob, Val= x}

如何在不执行报告x =新报告(...)

的情况下将其存储在报告中

由于

2 个答案:

答案 0 :(得分:0)

{Name=Bob, Val= x}与您的对象不匹配。

案件很重要。

private String name;
private String value;

选项

1)更新Java对象:private String Name, Val;

2)更新Firebase,让namevalue成为关键。

答案 1 :(得分:0)

试试这个,我将你的对象封装起来。

mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.getValue() != null)
        {
            Report = dataSnapshot.getValue(Report.class);
        }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
//---
            }
        });