Аннотация Firestore @propertyName дает странную ошибку?

# #firebase #kotlin #google-cloud-firestore #kotlin-coroutines #data-class

#Android #огневая база #котлин #google-облако-firestore

Вопрос:

Вот мой класс данных:

 import com.google.firebase.firestore.PropertyName  data class MHatchery(  @set:PropertyName("hName")  var hName:String,  val hLocation:String, )  

Теперь, когда я пытаюсь ввести значения, это выдает эту ошибку:

Нашел сеттера на com…***.модели.MHatchery с недопустимым именем с учетом регистра: Имя набора


Мне трудно понять, что это за имя Сета?? Почему я получаю эту ошибку? То, что я использую, это hName . Тогда в чем же setHName все-таки дело? Пожалуйста, помогите мне понять, где я ошибаюсь?

Версии Firestore, которые я использую:

 // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:28.2.1')  //Firebase implementation 'com.google.firebase:firebase-auth-ktx' implementation 'com.google.firebase:firebase-core'  //Firebase Auth UI implementation 'com.firebaseui:firebase-ui-auth:7.2.0'  //Firebase Database implementation "com.google.firebase:firebase-database-ktx"  //FireStore implementation 'com.google.firebase:firebase-firestore:23.0.2'  

и это мои зависимости от gradle

 classpath "com.android.tools.build:gradle:4.2.2"  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"  

Это скриншот моей базы данных. Я хочу, чтобы имя было таким hName . Вот почему я пытаюсь аннотировать @propertyName

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

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

1. Я понятия не имею об этой ошибке, но, может быть, попробуйте создать свой собственный сеттер с правильным именем, чтобы посмотреть, не изменит ли это что-нибудь?

2. Пожалуйста, отредактируйте свой вопрос и добавьте структуру своей базы данных в виде скриншота. Пожалуйста, ответьте @AlexMamo

3. @AlexMamo Добавил скриншот.

4. Понятно, я сейчас же напишу тебе ответ.

Ответ №1:

Вы получаете следующую ошибку:

Нашел сеттера на com…***.модели.MHatchery с недопустимым именем с учетом регистра: Имя набора


Потому что имена полей в вашем MHatchery классе отличаются от имен в базе данных. Например, в вашем классе у вас есть свойство hName с заглавной N буквы, в то время как в вашей базе данных поле называется hname строчным n . Чтобы можно было сопоставить документ Firestore с типом объекта MHatchery , имя свойств должно совпадать.

Есть два способа, которыми вы можете решить эту проблему. Первым из них было бы изменить имена полей в вашем классе, чтобы они соответствовали полям в базе данных. Так что вам следует измениться:

 var hName:String,  

Для:

 var hname:String,  

И удалите аннотацию:

 //@set:PropertyName("hName")  

Или вы добавляете следующие примечания перед свойством, как это:

 @get:PropertyName("hName") @set:PropertyName("hName") var hName:String,  

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

1. Даже если база данных пуста, она выдает ту же ошибку.

2. Это, скорее всего, из-за @set:PropertyName("hName") . Свойство, называемое hName , не существует, отсюда и ошибка.

3. Работает ли это с решением в моем ответе?

4. Конечно. Это было очень полезно. Также, если бы вы могли отредактировать набор и перейти к hName,вместо hname, это было бы полезно и для других., потому что это то, что я искал

5. Я только что это сделал. Ура 😉