如果setter是重写方法,则Firebase无法找到setter

时间:2016-08-06 07:19:37

标签: android firebase firebase-realtime-database

我有一个基类,它存储一个名为updatedAt的字段和一个setter setUpdatedAt。有一个儿童班儿童。我知道Firebase在父类中找不到setter,所以我只是在Child中再次定义setter setUpdatedAt,但我仍然得到"没有在class xxx.Child"

我的数据库json有" updatedAt"字段。

示例代码:

public abstract class Model {
  private String mId;
  private long mUpdatedAt;

  public String getId() {return mId;}
  public void setId(String id) { mId = id;}
  public long getUpdatedAt() {return mUpdatedAt;}
  public void setUpdatedAt(long updatedAt) { mUpdatedAt = updatedAt;}
}

public abstract class Child extends Model {
  private String mCreator;
   public String getCreator() {
        return mCreator;
    }

    public void setCreator(String creator) {
        mCreator = creator;
    }
  // having the following or not does not change the outcome
  public void setUpdatedAt(long updatedAt) {
        super.setUpdatedAt(updatedAt);
    }
}

// then somewhere else, do this
new ValueEventListener() {
  public void onDataChange(DataSnapshot dataSnapshot) {
  model = dataSnapshot.getValue(Child.class);
}

我得到了#34;没有在class xxx.Child"上发现的更新的set的setter / field和"没有在类xxx.Child"上找到的id的setter / field。当" model = dataSnapshot.getValue(Child.class);"被执行。

有关实际代码示例,请参阅github MinFirebaseApp。在MainActivity中,您可以看到两种方法" createEmployee"和" showEmployee",它显示了如何在" createEmployee"中创建员工。并且" showEmployee"中提取了同一名员工。使用代码,您可以通过(在将包ID更改为您的代码之后)重现它:

  1. 将google-services.json文件放在app文件夹
  2. 启动应用
  3. 点击"登录"以匿名方式登录
  4. 点击"创建员工",查看员工是否已创建
  5. 转到console.firebase.google.com以检查该员工是否 使用id,name和updatedAt
  6. 创建
  7. 点击"显示员工"从应用程序,请参阅" updatedAt"和" id" 未设置。
  8. 检查logcat以找到类似"找不到id的setter / field"和"没有找到updatedAt的setter / field"

1 个答案:

答案 0 :(得分:0)

您需要在子类中调用所有的setter。你也可以做吸气剂。现在你只是在做setUpdatedAt(),但也有setId()。这是实时数据库的Android客户端库中的一个错误,但该团队正在开发一个将来可用的修复程序。