# #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. Я только что это сделал. Ура 😉