我有一个正在开发的android应用程序,我在其中通过截取发出API请求,在发出API调用后,我得到了一堆返回的JSON对象。我现在将这些值保存到默认值中。保存后,我现在尝试将值显示到我的ui元素中,但所有内容都是空的,并且没有显示值。我的代码在下面突出显示
fun loginUser(context: Context, email: String, password: String, completion: (Boolean) -> Unit): Unit {
val jsonBody = JSONObject()
jsonBody.put("email", email)
jsonBody.put("password", password)
val requestBody = jsonBody.toString()
val loginRequest = object : JsonObjectRequest(Method.POST, URL_LOGIN, null, Response.Listener {response ->
try {
userEmail = response.getString("user")
authToken = response.getString("token")
isLoggedIn = true
completion(true)
} catch (e: JSONException) {
Log.d("JSON", "EXC:" + e.localizedMessage)
completion(false)
}
}, Response.ErrorListener { error ->
Log.d("ERROR", "Could not login user: $error")
completion(false)
}) {
override fun getBodyContentType(): String {
return "application/json; charset=utf-8"
}
override fun getBody(): ByteArray {
return requestBody.toByteArray()
}
}
Volley.newRequestQueue(context).add(loginRequest)
}
fun findUserByEmail(context: Context, completion: (Boolean) -> Unit): Unit {
val finUserByEmailRequest = object : JsonObjectRequest(Method.GET, "$URL_GET_USER$userEmail", null, Response.Listener {response ->
try {
UserDataService.name = response.getString("name")
UserDataService.email = response.getString("email")
UserDataService.avatarName = response.getString("avatarName")
UserDataService.avatarColor = response.getString("avatarColor")
UserDataService.id = response.getString("_id")
val userDataChanaged = Intent(BROADCAST_USER_DATA_CHANGED)
LocalBroadcastManager.getInstance(context).sendBroadcast(userDataChanaged)
completion(true)
} catch (e: JSONException) {
Log.d("JSON", "EXC:" + e.localizedMessage)
completion(false)
}
}, Response.ErrorListener { error ->
Log.d("ERROR", "Could not find user: $error")
completion(false)
}) {
override fun getBodyContentType(): String {
return "application/json; charset=utf-8"
}
override fun getHeaders(): MutableMap<String, String> {
val headers = HashMap<String, String>()
headers["Authorization"] = "Bearer $authToken"
return headers
}
}
Volley.newRequestQueue(context).add(finUserByEmailRequest)
}
我的主要活动
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
val toggle = ActionBarDrawerToggle(
this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
LocalBroadcastManager.getInstance(this).registerReceiver(userDataChangeReceiver, IntentFilter(BROADCAST_USER_DATA_CHANGED))
}
private val userDataChangeReceiver = object : BroadcastReceiver() {
override fun onReceive(contect: Context?, intent: Intent?) {
if (AuthService.isLoggedIn) {
userNameNavHeader.text = UserDataService.name
userEmailNavHeader.text = UserDataService.email
val resourceId = resources.getIdentifier(UserDataService.avatarName, "drawable", packageName)
userImageNavHeader.setImageResource(resourceId)
userImageNavHeader.setBackgroundColor(UserDataService.returnAvatarColor(UserDataService.avatarColor))
loginBtnNavHeader.text = "Logout"
}
}
}
在其中调用loginUser方法
fun loginLoginBtnClicked(view: View): Unit {
val email = loginEmailTxt.text.toString()
val password = loginPasswordTxt.text.toString()
AuthService.loginUser(this, email, password) {success ->
if (success) {
AuthService.findUserByEmail(this) {fsuccess ->
if (fsuccess) {
finish()
}
}
}
}
}
您首先需要获得对导航标题主布局的引用,才能更新导航标题主布局中的文本视图和图像视图。不要直接使用元素的id,而应该使用nav_头引用,然后像这样使用id
private val userDataChangeReceiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if(AuthService.isLoggedIn){
Log.d("qwe", UserDataService.name)
Log.d("qwe", UserDataService.email)
Log.d("qwe", UserDataService.avatarName)
Log.d("qwe", "Made it inside the broadcast bro")
Log.d("qwe", "Wrap")
nav_drawer_header_include.userEmailNavHeader.text = UserDataService.email
nav_drawer_header_include.userNameNavHeader.text = UserDataService.name
userEmailNavHeader.text = UserDataService.email
val resourseid= resources.getIdentifier(UserDataService.avatarName,"drawable",packageName)
nav_drawer_header_include.userImageNavHeader.setImageResource(resourseid)
nav_drawer_header_include.loginBtnNavHeader.text="Logout"
}
}
}
我们应该经常使用日志,它帮助我直接解决问题,而不是浪费时间在完美的工作上。
我在学习Android Kotlin课程时也遇到了这个问题,但在搜索之后,我发现很多人都面临这个问题,他们在不同的平台上提问,但没有给出答案。但在搜索相同的术语“UI元素不更新android”后,在java中找到了一些堆栈溢出的答案:如何更改导航抽屉标题中TextView的文本?
他们都解释说,首先要得到参考,然后我们才能更新视图。然后我试了试,幸运的是它工作得很好。
PS:这是我的第一个答案,请不要介意错误,我道歉。
标题说明了一切。当我调用时,我不希望再显示“”图标,而是显示向后的导航箭头。 不幸的是,当我调用这个方法时,只显示标题,没有向后箭头和“汉堡包”图标。将再次设置为true后,它再次显示“Hamburger”图标。 我设置了和 编辑:基本上,这里建议的解决方案是:将抽屉图标改回后箭头,但不给我后箭头。 有人知道这个问题的解决方案吗?非常感谢!
< code > autocomplete textview 出现了一个奇怪的问题。 我有一个,在键入时显示城市建议。城市列表通过 从远程服务器检索。当我使用软键盘或软键盘上的按钮时,建议工作正常。确实显示建议的城市。 但是,当我尝试使用设置文本时,我有一个问题。.我也尝试过但仍然没有运气。 适配器就在那里,只是建议没有显示出来。 有什么建议吗? 谢了。
问题内容: 我正在编写Rails 4.0.2应用程序,并试图在AJAX事件发生后在我的视图中显示Flash通知。 在我看来,我会显示一个日历,其中包含用户可以点击的天数。当他们这样做时,我会通过onclick事件处理程序触发AJAX事件,该事件处理程序会更新我的模型(添加或删除记录)。触发事件后,我将完成页面刷新以显示更新的结果。 我发现我必须在JS click事件期间进行页面刷新,以使视图正确更
我有一个带有标头的Spring Boot REST控制器,它可以有多个值: 并使用Springfox实现了Swagger。当我加载Swagger UI时,我只能从版本标题列表中看到并选择v1选项。如何在Swagger UI中显示所有表头值以供选择?如何更改Swagger UI列表中的默认头值?
我正在从应用程序中的迁移到。但我不知道如何在
我有一个spring的网络应用程序,我增加了swagger和swagger-UI。我添加了一个虚拟类来测试Swagger: 构建/部署之后,我可以在swagger页面上看到虚拟类(参见附件1)。问题是,“列表操作”没有显示任何内容。原始输出如下: 我想,问题是一个缺失的标签“操作”或类似的东西……但我不确定(也不知道,如何修复这一点)。有什么建议吗?