Android Studio中如何将MQTT字符串转Int并修改ImageView高度
解决方案:MQTT字符串转Int并修改ImageView高度
1. 安全将MQTT字符串转为Int类型
MQTT传来的字符串可能存在非数字格式,直接用toInt()会抛出异常,推荐使用toIntOrNull()做安全转换:
// 从MQTT获取的字符串 val msgl = "${message.toString()}" // 转换为Int,失败时返回null val targetHeight: Int? = msgl.toIntOrNull() // 处理转换结果 targetHeight?.let { // 转换成功,执行修改ImageView高度逻辑 } ?: run { // 转换失败,可添加日志或默认值处理 Log.e("MQTT", "无效的高度数值格式: $msgl") }
2. 修改ImageView的高度
直接修改ImageView.height不会生效,必须通过LayoutParams设置,同时注意MQTT回调通常在子线程,更新UI必须切换到主线程:
targetHeight?.let { height -> // 切换到主线程更新UI view.post { // 获取当前ImageView的布局参数 val layoutParams = imagea.layoutParams // 设置目标高度(单位为px,若需dp转px可参考下方工具方法) layoutParams.height = height // 应用新的布局参数 imagea.layoutParams = layoutParams } }
如果MQTT传来的是dp单位的数值,可添加dp转px的工具方法:
// dp转px工具方法 fun dpToPx(context: Context, dp: Int): Int { return (dp * context.resources.displayMetrics.density).toInt() }
使用时替换为:
layoutParams.height = dpToPx(view.context, height)
完整整合代码
val imagea = view.findViewById<ImageView>(R.id.imageView2) val msgl = "${message.toString()}" val targetHeight = msgl.toIntOrNull() targetHeight?.let { height -> view.post { val layoutParams = imagea.layoutParams layoutParams.height = height // 若为dp值,替换为dpToPx(view.context, height) imagea.layoutParams = layoutParams } } ?: run { Log.e("MQTT", "无法解析高度数值: $msgl") }
内容的提问来源于stack exchange,提问作者user1114881
相关产品推荐
相关产品推荐

