У меня есть Kotlin проект в MVVM Architecture. API встроен в Laravel Backend. Все работает нормально, если Ошибка ответа не обновляет пользовательский интерфейс. Является ли это проблемой LiveData или нет, я не могу понять.
SignUpRepository.kt
val failureResponse = MutableLiveData<JSONObject>()
fun signUp(name: String, email: String, password: String){
val retrofit = Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create()).build()
val service = retrofit.create(UserAPIService::class.java)
service.createUser(name, email, password).enqueue(object : Callback<String>{
override fun onFailure(call: Call<String>, t: Throwable) {
Log.d(TAG, "Failure: ${t.localizedMessage}")
}
override fun onResponse(call: Call<String>, response: Response<String>) {
if(response.isSuccessful()){
Log.d(TAG, "Success: ${response.body()}")
} else {
var jsonObject: JSONObject? = null
try {
jsonObject = JSONObject(response.errorBody()!!.string())
if(failureResponse.value == null) {
failureResponse.value = jsonObject
} else {
failureResponse.postValue(jsonObject)
}
} catch (e: JSONException) {
e.printStackTrace()
}
}
}
})
}
SignUpViewModel.kt
val failureResponse: LiveData<JSONObject>
init {
this.signUpResponse = repo.signUpResponse
this.failureResponse = repo.failureResponse
}
fun signUp(name: String, email: String, password: String){
repo.signUp(name, email, password)
}
И RegistrationActivity. kt
btnSignup.setOnClickListener {
val username = txt_create_username.text.toString()
val email = txt_create_email.text.toString()
val password = txt_created_password.text.toString()
signUpViewModel.stateChange()
signUpViewModel.signUp(username, email, password)
signUpViewModel.failureResponse.observe(this, Observer {
nameError.text = (it.getJSONArray("name")).getString(0)
emailError.text = (it.getJSONArray("email")).getString(0)
passwordError.text = (it.getJSONArray("password")).getString(0)
})
}
Я хочу напечатать указанную ошибку c для соответствующего текстового представления, т.е. nameError, emailError ... et c. Но nameError, emailError ... не обновляются, и когда я использовал LiveData.PostValue(value)
, приложение вылетает. Пожалуйста, помогите мне.