Как сохранить моментальный снимок документа (сложный объект) в общих настройках или файле? - PullRequest
1 голос
/ 29 сентября 2019

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

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

fun saveLastDocumentAttendedEvents(lastDocument: DocumentSnapshot) {

        val json = gson.toJson(lastDocument)
        with(sharedPref.edit()) {
            putString("LAST_DOCUMENT_ATTENDED_EVENTS", json)
            apply()
        }

    }


    fun loadLastDocumentAttendedEvents() : DocumentSnapshot?  {
        val json = sharedPref.getString("LAST_DOCUMENT_ATTENDED_EVENTS", "")
        return gson.fromJson(json, DocumentSnapshot::class.java)
    }

Обычно я могу без особых проблем сохранить пользовательский объект в общем предпочтении, используя эти методы, но всегда происходит сбой при сохранении DocumentSnaphot в общем предпочтении с сообщением об ошибке:

в com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write (TypeAdapterRuntimeTypeWrapper.java:69) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.write.apava: Reflective: Reflectiveпо адресу com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write (ReflectiveTypeAdapterFactory.java:245) по адресу com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write (TypeAdapterRuntimeTjpe.gow.ra.gW.internal.bind.ReflectiveTypeAdapterFactory $ 1.Запись (ReflectiveTypeAdapterFactory.java:127) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write (ReflectiveTypeAdapterFactory.java:245) по адресу com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.w69.jp.TypeT.Write (Time) Typeна странице com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.write (ReflectiveTypeAdapterFactory.java:127) на странице com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write (ReflectiveTypeAdava.g2).gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write (TypeAdapterRuntimeTypeWrapper.java:69) по адресу com.google.gson.internal.bind.CollectionTypeAdapterFactory $ Adapter.write (CollectionTypeAdapterFactory.jternal:b).CollectionTypeAdapterFactory $ Adapter.write (CollectionTypeAdapterFactory.java:61) по адресу com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write (TypeAdapterRuntimeTypeWrapper.java:69) по адресу com.google.gson.apteF_Find.FFactory.java:127) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write (ReflectiveTypeAdapterFactory.java:245) по адресу com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.w69.jp.TypeT.Write (Time) Typeна странице com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.write (ReflectiveTypeAdapterFactory.java:127) на странице com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write (ReflectiveTypeAdava.g2).gson.internal.bind.$ Adapter.write (ReflectiveTypeAdapterFactory.java:245) по адресу com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write (TypeAdapterRuntimeTypeWrapper.java:69) по адресу com.google.gson.internal.bind.actactFitFyTyFyry.java:127) по адресу com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write (ReflectiveTypeAdapterFactory.java:245) по адресу com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.w69.jp.TypeTlayer (Time) Typeна com.google.gson.internal.bind.CollectionTypeAdapterFactory $ Adapter.write (CollectionTypeAdapterFactory.java:97) 2019-09-29 11: 35: 07.036 15370-15370 / com.muchammadagunglaksana.kumpul_muslim E / AndroidRuntime: в com.g.gson.internal.bind.CollectionTypeAdapterFactory $ Adapter.write (CollectionTypeAdapterFactory.java:61)

Мне нужно сохранить его в общих настройках, файле или т. Д., Чтобы сохранить последний документ из запроса Firestore

1 Ответ

0 голосов
/ 29 сентября 2019

В идеале, вместо реализации собственного кеша, вы можете использовать собственную систему кеширования firebase.

Чтобы включить ее, вы должны использовать

val settings = FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(true)
        .build()
db.firestoreSettings = settings

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

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

Пример здесь Десериализация Котлина Гсона

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