Firebase @Исключить с помощью класса данных kotlin

#firebase #firebase-realtime-database #kotlin

#firebase #firebase-база данных в реальном времени #kotlin

Вопрос:

У меня есть этот класс данных в Kotlin (пример):

 import com.google.firebase.database.Exclude

data class User(val name: String = "", @Exclude val age: Int = 0)
  

И я не хочу сохранять свойство age в firebase. @Exclude должен это сделать, но это не работает, возраст по-прежнему сохраняется.

Существуют ли какие-либо обходные пути?

Комментарии:

1. Из того, что я прочитал, это должно быть то же самое, но имеет ли значение префикс Exclude с «field:»? data class User(val name: String = "", @field:Exclude val age: Int = 0)

2. Нет, не имеет никакого значения, но @get:Exclude работает (нашел его благодаря вам). Если вы хотите опубликовать это как ответ, и я приму его.

3. Ах, и это имеет смысл теперь, когда вы тоже упомянули об этом. Командные усилия!

Ответ №1:

Размещение @Exclude в свойстве нацелено на его сгенерированное поле, а не на сгенерированный метод доступа get. Чтобы сделать последнее, вам нужно добавить префикс «Exclude» к «get:». например:

 data class User(val name: String = "", @get:Exclude val age: Int = 0)
  

Более подробную информацию см. в разделе Использование аннотации-Цели сайта.

Ответ №2:

На самом деле вам не нужно добавлять только @get:Exclude , вам нужно исключить все 3,

@Исключить @установить:исключить @получить:исключить.

Я сделал это для imageUrl и providerId

 data class FirebaseChatModel(
        @get:PropertyName("message")
        @set:PropertyName("message")
        var message: String = "",
        @get:PropertyName("type")
        @set:PropertyName("type")
        var type: Int = 1,
        @get:PropertyName("senderId")
        @set:PropertyName("senderId")
        var senderId: Int = 0,
        @get:PropertyName("receiverId")
        @set:PropertyName("receiverId")
        var receiverId: Int = 0,
        @Exclude @set:Exclude @get:Exclude var imageUrl: String? = "",
        @Exclude @set:Exclude @get:Exclude var providerId: Int = 0
)