Обратная совместимость при добавлении новых полей в Firebase DB - PullRequest
0 голосов
/ 29 июня 2018

В моей текущей базе данных Firebase в реальном времени есть следующая структура данных:

public class E {
  public int x;
  public int y;
  public int x;
}

Эта база данных в настоящее время используется моим приложением для Android, которое уже используется пользователями на производстве.

Я хочу добавить нового члена в класс (String z), как показано ниже:

public class E {
  public int x;
  public int y;
  public int x;
  public String z;
}

При использовании старой версии приложения я вижу эту ошибку в logcat:

W / ClassMapper: в классе com.me.you.E

не найдено установщика / поля для z

И приложение застряло.

Я включил проверку версии базы данных до того, как приложение начнет помогать пользователям обновлять свое приложение, но надеялся, что в этом конкретном случае она не понадобится.

Возможно ли какое-либо управление версиями данных? Любое другое предложение?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Чтобы избавиться от этого предупреждающего сообщения, аннотируйте свой класс с помощью @IgnoreExtraProperties:

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

См. Справочную документацию для аннотации IgnoreExtraProperties :

Свойства, которые не отображаются на поля класса, игнорируются при сериализации в класс, аннотированный этой аннотацией.

Как прокомментировал Дуг, помимо этого простого изменения, чтобы избавиться от предупреждения, миграция данных в Firebase является сложной темой, на которую невозможно ответить в одном вопросе переполнения стека. Но мы можем попытаться помочь с конкретными проблемами, такими как предупреждения и сбои. Если ваше приложение по-прежнему зависает при загрузке, пожалуйста, опубликуйте минимально полный проверяемый способ воспроизвести проблему .

0 голосов
/ 29 июня 2018

Я думаю, вы, возможно, не добавили методы getters и setters, связанные с вашей новой переменной z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...