Firestore и Unicode

#android #firebase #google-cloud-firestore

# #Android #firebase #google-облако-firestore

Вопрос:

В документации описано, что Firestore поддерживает Unicode. Вам просто нужно вставить уже отформатированный текст в Firestore. Но при выгрузке не учитываются следующие:

  1. Разрыв строки;
  2. Символы Юникода вставляются непосредственно в текст (например u000a ). Код приведен ниже. Репозиторий
     suspend fun getData(): Response<List<Model>> =
        suspendCoroutine { cont ->
            val collection =
                firestore
                    .collection(COLLECTION_NAME)
                    .whereEqualTo(DEFAULT_CONDITION_FIELD, DEFAULT_CONDITION_VALUE)
                    .orderBy(SORT_FIELD, SORT_DIRECTION)
                    .get()

            collection
                .addOnSuccessListener { query ->
                    val data = arrayListOf<Model>()
                    query.toObjects(ModelDomain::class.java).forEach { data.add(it.toModel()) }
                    cont.resume(Response.Success(data))
                }
                .addOnFailureListener { cont.resume(Response.Error(it)) }
        }
 

ViewModel

     private val _data: LiveData<Response<List<Model>>> = loadData()
    val data get() = _data

    private fun loadData(): LiveData<Response<List<Model>>> =
        liveData(Dispatchers.IO) {
            emit(Response.Loading)

            try {
                emit(repository.getData())
            } catch (e: Exception) {
                emit(Response.Error(e))
            }
        }
 

Модель

 data class ModelDomain(
    var description: String = ""
) : KoinComponent {
    fun toModel() =
        Model(
            description = description
        )
}

data class Model(
    val description: String
)
 

Часть кода была опущена.

Обновить

Просто написал в Notepad :

введите описание изображения здесь

Скопировал это в Firestore:

введите описание изображения здесь

Результат:

введите описание изображения здесь

Ответ №1:

Firestore никоим образом не изменяет данные, которые вы в него записываете. Если вы что-то напишете в документ, а затем прочитаете документ, вы получите точно такие же данные, которые вы в него ввели.

Если вы просматриваете документ в консоли Firebase, вы не увидите все возвраты каретки и пробелы. Они свернуты, чтобы сэкономить место на экране при отображении больших объемов данных. Но если вы прочитаете данные программно, они определенно будут точно такими, как вы их написали.

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

1. Опять же, консоль сворачивает данные. Вы должны прочитать и записать документ программно , чтобы он правильно работал с символами возврата каретки. Копирование и вставка с консоли — это не то.

2. Теперь все ясно. Чтобы получить правильные данные, вам нужно ввести их программно. Возможно ли реализовать это без написания дополнительных функций (приложение адаптировано для справочника каналов)?

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