Я пытаюсь получить содержимое документа из Firestore.Следующая ссылка на изображение показывает структуру базы данных Структура базы данных Firestore
Что я хочу: Я хочу получить содержимое документа с помощью пользовательского объекта и добавить его вlist.
Проблема: Я получаю эту ошибку: E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.aalmesbah.turoodpilot, PID: 12160 Java.lang.RuntimeException: не удалось десериализовать объект.Класс com.google.firebase.auth.UserInfo не определяет конструктор без аргументов.Если вы используете ProGuard, убедитесь, что эти конструкторы не удалены
Я пытался получить содержимое документа с помощью методов get () и getString () , и проблема работала нормально.только с toObject () ?
Я искал и пробовал некоторые предлагаемые решения из других вопросов, таких как добавление значений по умолчанию для класса данных, но, к сожалению, это не сработало.
код класса данных:
data class UserInfo (val name: String? = "",
val email: String? = "",
val phoneNum: String? = "",
val address: String? = "") {
constructor(): this("","","", "" )
}
Код фрагмента профиля: (где предполагается, что содержимое документапоказано)
class ProfileFragment : Fragment() {
private lateinit var auth: FirebaseAuth
private lateinit var db: FirebaseFirestore
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_profile, container, false)
auth = FirebaseAuth.getInstance()
db = FirebaseFirestore.getInstance()
return view
}
override fun onStart() {
super.onStart()
val userID = auth.currentUser?.uid
val docRef = db.collection("users").document(userID!!)
docRef.addSnapshotListener(EventListener<DocumentSnapshot> { documentSnapshot, e ->
if (e != null) {
Log.w(TAG, "Listen failed.", e)
return@EventListener
}
if (documentSnapshot != null && documentSnapshot.exists()) {
docRef.get().addOnSuccessListener { documentSnapshot ->
val userInfo = documentSnapshot.toObject(UserInfo::class.java)
emailTV.text = userInfo?.email
}
} else {
Log.d(TAG, "Current data: null")
}
})
}
}
код метода sendUserData () при операции регистрации
private fun sendUserData() {
val name = userN.text.toString()
val email = userEm.text.toString()
val phone = userPhone.text.toString()
val addressName = addressName.text.toString()
val area = area.text.toString()
val block = block.text.toString()
val street = strees.text.toString()
val avenue = avenue.text.toString()
val house = house.text.toString()
val floor = floor.text.toString()
val apartment = apartment.text.toString()
val additionalInfo = additional.text.toString()
val address = "Addres Name: $addressName \n Area: $area \n B: $block ST: $street Av: $avenue H: $house\n " +
"Floor: $floor Apartment: $apartment \n Notes: $additionalInfo"
val userID = auth.currentUser?.uid
val userData = UserInfo(name, email, phone, address)
db.collection("users").document(userID!!).set(userData).addOnSuccessListener {
Toast.makeText(this, "Successfully Registered", Toast.LENGTH_SHORT).show()
}.addOnFailureListener{
Toast.makeText(this, "Data Upload error!", Toast.LENGTH_SHORT).show()
}
}