Как сохранить объект Firebase DataSnapshot в общих настройках?

Я пытаюсь сохранить объект Firebase DataSnapshot в общих настройках.

См. этот пост, в котором я разработали метод, который включает в себя это.

...

Что я пробовал до сих пор:

  1. Используя метод Gson.Json. РЕЗУЛЬТАТ: Кажется, не работает... Я не думаю, что класс DataSnapshot является классом типа POJO... по крайней мере, он не будет работать с gson.

  2. Используя этот метод:

    private static String toString(Serializable o) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = новый ObjectOutputStream( baos ); oos.writeObject( о ); оос.закрыть(); вернуть Base64.getEncoder().encodeToString(baos.toByteArray()); }

РЕЗУЛЬТАТ: не работает... Я не думаю, что класс DataSnapshot является сериализуемым.

Я подумал о другом методе - просто сохраните DataSnapshot.toString() в Sharedpreferences... но как потом вернуть его обратно? Вы не можете сделать:

DataSnapshot snapshot = new DataSnapshot().fromString([string from sharedprefs])

Любая помощь приветствуется.


person Nerdy Bunz    schedule 14.09.2016    source источник
comment
Вы не должны сохранять большие куски данных в общих настройках.   -  person Tim    schedule 14.09.2016
comment
Откуда вы знаете, насколько она велика, вы видели мою базу данных? Насколько велик слишком большой?   -  person Nerdy Bunz    schedule 14.09.2016
comment
это плохой подход к хранению моментальных снимков данных в общих настройках, и это технически невозможно.   -  person Vishal Patoliya ツ    schedule 14.09.2016
comment
Независимо от размера данных, мой «совет» остается в силе. Я бы посоветовал вам поискать альтернативу   -  person Tim    schedule 14.09.2016
comment
Firebase напрямую поддерживает enablePersistenceStorage для автономной поддержки.   -  person Vishal Patoliya ツ    schedule 14.09.2016
comment
Ну... если бы кто-нибудь из вас мог глубже изучить пост, на который я ссылался, это объясняет, почему я пытаюсь это сделать, и предложить лучший дизайн, я был бы очень признателен.   -  person Nerdy Bunz    schedule 14.09.2016
comment
Спасибо, Вишал ... Я собираюсь изучить это дальше, я думаю, это может содержать решение.   -  person Nerdy Bunz    schedule 14.09.2016
comment
Вы можете создать класс модели, действующий как адаптер между DataSnapshot, а затем использовать Gson для его сохранения.   -  person Linxy    schedule 14.09.2016
comment
Проверьте это. Это может помочь.   -  person tpk    schedule 15.09.2016
comment
Это то же самое, что я пробовал до сих пор: 1) Использование метода Gson.Json. РЕЗУЛЬТАТ: Кажется, не работает... Я не думаю, что класс DataSnapshot является классом типа POJO... по крайней мере, он не будет работать с gson.   -  person Nerdy Bunz    schedule 15.09.2016
comment
Спасибо, хотя ... Я думаю, что все равно попробую другой подход ... похоже, ад обратного вызова - мой единственный выбор, учитывая мои нынешние знания и способности.   -  person Nerdy Bunz    schedule 15.09.2016


Ответы (1)


Я столкнулся с той же проблемой. Я хотел сохранить Datasnapshot внутри SharedPreferences, и мои данные json были немного сложными. Поэтому я написал ниже код.

//Чтобы сохранить в общие настройки

 public void setAppLanguageDataSnapshot(DataSnapshot mDataSnapshot) {
    ObjectMapper mapper = new ObjectMapper();
    try {
        mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
        String json = mapper.writeValueAsString(mDataSnapshot.getValue());
        StorageUtils.getInstance(context).setString(AppConstants.SharedPrefConstants.APP_CONTENT, json);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
   }

//Чтобы получить данные как объект JSON.

 String data = StorageUtils.getInstance(context).getString(AppConstants.SharedPrefConstants.APP_CONTENT);
    String value = "";
    if (!TextUtils.isEmpty(data)) {
        try {
            JSONObject jsonObject = new JSONObject(data);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
person andro-girl    schedule 06.02.2018