Android 向Firebase DB添加新字段时的向后兼容性

Android 向Firebase DB添加新字段时的向后兼容性,android,firebase,firebase-realtime-database,database-versioning,Android,Firebase,Firebase Realtime Database,Database Versioning,我当前的Firebase实时数据库中有以下数据结构: public class E { public int x; public int y; public int x; } 该数据库目前正由我的Android应用程序使用,该应用程序已被生产中的用户使用 我想向类(字符串z)添加一个新成员,如下所示: public class E { public int x; public int y; public int x; public String z; } 使用应用

我当前的Firebase实时数据库中有以下数据结构:

public class E {
  public int x;
  public int y;
  public int x;
}
该数据库目前正由我的Android应用程序使用,该应用程序已被生产中的用户使用

我想向类(字符串z)添加一个新成员,如下所示:

public class E {
  public int x;
  public int y;
  public int x;
  public String z;
}
使用应用程序的旧版本时,我在logcat中看到此错误:

W/ClassMapper:com.me.you.E类上找不到z的setter/field

应用程序被卡住了

在应用程序开始引导用户更新应用程序之前,我已经包含了一个数据库版本检查,但我希望在这种特定情况下不需要它


数据是否存在任何可能的版本控制?还有其他建议吗?

我认为您可能没有添加与新变量z相关的getter和setter方法。

要消除该警告消息,请使用
@ignoreextroperties
注释您的类:

@IgnoreExtraProperties
public class E {
  public int x;
  public int y;
  public int x;
}
见:

序列化到使用此注释注释的类时,将忽略未映射到类字段的属性


正如Doug所评论的,除了为了消除警告而进行的简单更改之外,Firebase上的数据迁移是一个复杂的主题,不可能用单个堆栈溢出问题来回答。但我们可以尝试帮助解决特定问题,例如警告和崩溃。如果您的应用程序在加载时仍然被卡住,请发布一个。

这是有道理的,但因为我在旧版本中看到了这个错误,所以它与此无关。我们的目标不是更新旧版本,同时仍然允许它工作(“向后兼容”),事实并非如此-Firebase将直接使用公共字段来代替javabean样式的getter和setter。版本控制是一个困难的主题。实时数据库或Firestore没有内置的版本控制帮助。您的应用程序需要能够处理可能的更改,这可能涉及不使用内置序列化。您能否详细说明或添加指向示例\文章\教程的任何链接?