#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
)