Ошибка типов данных в Firebase
столкнулся с проблемой, только начал с мобилкой знакомиться поэтому уже сутки сижу не могу понять что я сделал не так в общем, у меня есть два спинера (spinnerCategories и spinnerDoctors) в первом я выбираю специализацию врача, во втором соответственно врачей в этой категории так вот при выборе категории в спинере приложение крашиться с ошибкой firebase, то что я типа Long в String преобразую (com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String) прочекал все функции и дата классы связанные с этими спиннерами и не могу понять, где там Long и почему он преобразуется в String... (в самом Firebase тип данных выбран как надо) помогите люди добрые, а то уже второй день не высыпаюсь
Спиннеры
binding.spinnerCategories.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
selectedCategory = parent.getItemAtPosition(position) as String
selectedDoctor = null
binding.tvDoctorInfo.text = ""
loadDoctors(selectedCategory!!)
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
binding.spinnerDoctors.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
selectedDoctor = parent.getItemAtPosition(position) as Doctor
displayDoctorInfo(selectedDoctor!!)
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
Функции загрузки категорий и докторов
private fun loadCategories() {
val categoriesRef = firebaseDatabase.getReference("Categories")
categoriesRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val categories = mutableListOf<String>()
for (categorySnapshot in snapshot.children) {
val category = categorySnapshot.child("categoryName").getValue(String::class.java)
categories.add(category!!)
}
val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, categories)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.spinnerCategories.adapter = adapter
}
override fun onCancelled(error: DatabaseError) {
FancyToast.makeText(requireContext(), "Ошибка базы данных: $error", FancyToast.LENGTH_SHORT, FancyToast.ERROR, false).show()
}
})
}
private fun loadDoctors(category: String) {
val doctorsRef = firebaseDatabase.getReference("Doctors")
doctorsRef.orderByChild("categoryName").equalTo(category).addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val doctors = mutableListOf<Doctor>()
for (doctorSnapshot in snapshot.children) {
val doctor = doctorSnapshot.getValue(Doctor::class.java)
if (doctor != null) {
doctors.add(doctor)
}
}
val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, doctors)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.spinnerDoctors.adapter = adapter
}
override fun onCancelled(error: DatabaseError) {
FancyToast.makeText(requireContext(), "Ошибка при загрузке данных врачей: ${error.message}", FancyToast.LENGTH_SHORT, FancyToast.ERROR, false).show()
}
})
}
Дата классы
data class Doctor(
val name: String = "",
val adress: String = "",
val experience: String = "",
val rating: String = "",
val office: String = "",
val specialization: String = ""
)
data class User(
val username: String = "",
val passport: String = "",
val snils: String = "",
val oms: String = "",
val phoneNumber: String = "",
val email: String = ""
)
data class Record(
val userFullName: String,
val userPassport: String,
val userSnils: String,
val userOms: String,
val userPhoneNumber: String,
val doctorName: String,
val doctorSpecialization: String,
val doctorAdress: String,
val doctorOffice: String,
val appointmentDate: String,
val appointmentTime: String,
val appointmentDateTime: String
)