Какой обходной путь для хранения / извлечения перечислений в Firebase? - PullRequest
1 голос
/ 02 апреля 2019

Начнем с того, что я думаю, что это моя вина, что я начал использовать Firebase только в конце проекта.

В любом случае, я хочу сохранить объект Pub в базе данных.Он содержит различную информацию, такую ​​как часы работы, рейтинги, условия и т. Д.

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

Это ошибка.

 com.google.firebase.database.DatabaseException: Could not find enum value of com.example.matasolutions.pintindex.Day for value "Monday"
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToEnum(com.google.firebase:firebase-database@@16.1.0:302)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@16.1.0:212)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToType(com.google.firebase:firebase-database@@16.1.0:178)

Это класс enum.

public enum Day {
    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
};

Так выглядит конструктор с enum

public SingleOpeningHours(Day dayOfTheWeek,String openingTime, String closingTime){

        this.dayOfTheWeek = dayOfTheWeek;
        this.openingTime = openingTime;
        this.closingTime = closingTime;

    }

и, наконец, вот как он добавляется в список, а затем в базу данных.


  ArrayList<SingleOpeningHours> singleOpeningHours = new ArrayList<SingleOpeningHours>();

        singleOpeningHours.add(new SingleOpeningHours(Day.MONDAY, "09:00", "00:00"));
        singleOpeningHours.add(new SingleOpeningHours(Day.TUESDAY, "09:00", "01:00"));
        singleOpeningHours.add(new SingleOpeningHours(Day.WEDNESDAY, "09:00", "01:00"));
        singleOpeningHours.add(new SingleOpeningHours(Day.THURSDAY, "09:00","01:00"));
        singleOpeningHours.add(new SingleOpeningHours(Day.FRIDAY, "09:00", "01:00"));
        singleOpeningHours.add(new SingleOpeningHours(Day.SATURDAY, "09:00", "01:00"));
        singleOpeningHours.add(new SingleOpeningHours(Day.SUNDAY, "09:00", "01:00"));

РЕДАКТИРОВАТЬ: у меня есть 7 классов перечисления, которые связаны с сохраняемыми объектами.Какой лучший обходной путь для этого?Заранее спасибо, ребята

1 Ответ

0 голосов
/ 02 апреля 2019

База данных Firebase не поддерживает типы данных enum.Чтобы узнать больше о поддерживаемых типах данных, проверьте Поддерживаемые типы данных

Решение 1: (Самый простой) Просто используйте строки для дней, не перечисляя

Измените dayOfTheWeek на String

String dayOfTheWeek; // Changed from Day to String

public SingleOpeningHours(String dayOfTheWeek,String openingTime, String closingTime){

    this.dayOfTheWeek = dayOfTheWeek;
    this.openingTime = openingTime;
    this.closingTime = closingTime;

}

И использовать строку в списке singleOpeningHours следующим образом:

ArrayList<SingleOpeningHours> singleOpeningHours = new ArrayList<SingleOpeningHours>();

    singleOpeningHours.add(new SingleOpeningHours("MONDAY", "09:00", "00:00"));
    singleOpeningHours.add(new SingleOpeningHours("TUESDAY", "09:00", "01:00"));

Решение 2. Измените dayOfTheWeek, используемый в объекте SingleOpeningHours, на строку и используйте метод name () в классе Enum дляпреобразовать значение enum в строку

String dayOfTheWeek; // Changed from Day to String
String openingTime;
String closingTime;

public SingleOpeningHours(Day dayOfTheWeek,String openingTime, String closingTime){

this.dayOfTheWeek = dayOfTheWeek.name(); // make sure add .name()
this.openingTime = openingTime;
this.closingTime = closingTime;

}

И использовать enum Day в списке singleOpeningHours (здесь без изменений)

ArrayList<SingleOpeningHours> singleOpeningHours = new ArrayList<SingleOpeningHours>();

singleOpeningHours.add(new SingleOpeningHours(Day.MONDAY, "09:00", "00:00"));
singleOpeningHours.add(new SingleOpeningHours(Day.TUESDAY, "09:00", "01:00"));

Надеюсь, что эти решения помогут вамчтобы решить вашу проблему

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