android - 如何更改类中的 EditText 属性(在另一个活动上)?
问题描述
我的活动signUpClient.kt
调用 API 类,将 EditText 文本发送到 API(在称为客户端的模型中):
signUpAPI.postClient(客户端)
在这个 API 中,有一个发布客户端的函数(代码如下)。只要给定的电子邮件已经存在,服务器就会返回一条错误消息。我可以通过 Toast 显示错误,传递正确的上下文。
问题是:我想向用户表明该字段email
不正确,更改其 EditText 的属性。
我试图从 API 访问它的 ID,但它没有访问它。
有没有办法做到这一点?
注意:我知道如何更改 EditText 属性,问题是如何从另一个类更改它(这甚至不是一个活动)。 我尝试使用
findViewById
不成功。
注册客户端.kt:
btn_signup.setOnClickListener() {
val name = et_name.text.toString()
val email = et_email.text.toString()
val cellphone = et_cellphone.text.toString()
val birthdate = et_birthdate.text.toString()
val password = et_password.text.toString()
// Constructs a new client object
val client = Client(
name,
email,
cellphone,
birthdate,
password
)
signUpAPI = API(this)
signUpAPI.postCliente(client)
}
API.kt:
fun postCliente(cliente: Cliente) {
val TAG = "API Activity"
val apiInterface: ApiInterface
apiInterface = ClientApi.getClient().create(ApiInterface::class.java)
val clientePostCall = apiInterface.postCliente(cliente)
mProgressBar.visibility = View.VISIBLE
clientePostCall.enqueue(object: Callback<Cliente> {
override fun onResponse(call: Call<Cliente>, response: Response<Cliente>) {
mProgressBar.visibility = View.GONE
if(response.isSuccessful){
try {
Toast.makeText(context,"User " + response.body()!!.name + " created successfully.",Toast.LENGTH_SHORT).show()
val backHomeIntent = Intent(context, MainActivity::class.java)
context.startActivity(backHomeIntent)
} catch (e: NullPointerException) {
Toast.makeText(context, "Problem is unknown: ", Toast.LENGTH_SHORT).show()
}
}else {
try {
var jObjError = JSONObject(response.errorBody()!!.string())
var email = jObjError.getString("client_email")
Toast.makeText(context, "Email " + email + " já existe.", Toast.LENGTH_SHORT).show()
} catch (e: IOException){
Toast.makeText(context, "Problem is unknown: ", Toast.LENGTH_SHORT).show()
}
}
}
override fun onFailure(call: Call<Cliente>, t: Throwable) {
mProgressBar.visibility = View.GONE
Log.e(TAG, "onFailure: " + t.localizedMessage)
}
})
}
解决方案
理想情况下,您不应该有代码在 API 回调中访问您的视图,以防止这些视图引用使您的 Activity 在其预期的生命周期之外保持活动状态。您还希望保持网络代码和视图代码干净地解耦。
您可以做的是实现一个 ViewModel 类,其中包含保存 UI 状态(包括错误)的 LiveData 字段。然后您的 Activity 可以观察这些 LiveData 字段并对视图进行更新。在 ViewModel 中,您还可以让 API 类执行实际的 API 类,其回调将更新 ViewModel 的 LiveData 字段。
有关更多信息,请参见 Android 文档: https ://developer.android.com/topic/libraries/architecture/viewmodel
https://developer.android.com/topic/libraries/architecture/livedata
推荐阅读
- javascript - How to sink field value to nested JSON with lodash
- json - 如何使Vue显示来自json文件的本地路径的图像
- ibm-watson - 是否可以在 Watson 助手中获取 Slack 用户名作为实体?
- python-3.7 - 为什么在python中更新一个实例类变量会同时更新其他不相关的变量?
- javascript - 嵌套的 html5 可拖动项
- html - 将页面添加到滑块 (html)
- sql - Dbmail,为什么变量“DIA”将@body转换为null
- c++ - 为什么 (!=) 不等于运算符即使是假也会执行 C++
- jquery - 单击时更改引导程序“行”类 div 内的项目 div 类
- vba - 根据 ms-access (userform) 中的组合值隐藏/取消隐藏表单上的许多文本框