使用FusedLocation Library获取位置时TextView设经纬度报错求助
问题排查:FusedLocation获取位置后设置TextView报错
报错原因解析
你遇到的报错是因为it.longitude和it.latitude是Double数值类型,而TextView的setText()方法仅支持两种参数:
- 字符串/字符序列(
CharSequence) - 资源ID(
Int,对应strings.xml里的资源)
直接传入Double值时,编译器会尝试匹配setText(Int resid)的重载,但Double无法转换为合法的资源ID,因此触发参数不匹配的错误。
修复方案
方案1:直接将数值转为字符串
修改addOnSuccessListener内的代码,把Double值转为字符串后传入:
task.addOnSuccessListener { if(it!=null){ val longitude = findViewById<TextView>(R.id.longitude) val latitude = findViewById<TextView>(R.id.latitude) // 直接转字符串 longitude.setText(it.longitude.toString()) latitude.setText(it.latitude.toString()) // 或者用Kotlin属性语法更简洁: // longitude.text = it.longitude.toString() // latitude.text = it.latitude.toString() } }
方案2:格式化经纬度(推荐)
如果需要控制经纬度的小数位数(比如保留6位,符合GPS精度),可以用字符串格式化:
task.addOnSuccessListener { it?.let { val longitude = findViewById<TextView>(R.id.longitude) val latitude = findViewById<TextView>(R.id.latitude) // 格式化保留6位小数 val formattedLong = String.format("%.6f", it.longitude) val formattedLat = String.format("%.6f", it.latitude) longitude.text = formattedLong latitude.text = formattedLat } }
额外优化建议
把findViewById移到回调外面,避免每次成功获取位置都重复查找控件:
private fun fetchLocation() { val task = fusedLocationProviderClient.lastLocation // 提前获取控件实例 val longitudeTv = findViewById<TextView>(R.id.longitude) val latitudeTv = findViewById<TextView>(R.id.latitude) if(ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 101) return } task.addOnSuccessListener { it?.let { longitudeTv.text = String.format("%.6f", it.longitude) latitudeTv.text = String.format("%.6f", it.latitude) } } }
报错信息翻译
没有任何一个函数可以匹配传入的参数:
public final fun setText(text: CharSequence!): Unit 定义于 android.widget.TextView
public final fun setText(resid: Int): Unit 定义于 android.widget.TextView
内容的提问来源于stack exchange,提问作者Divyanshu Dobriyal
相关产品推荐
相关产品推荐

