You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:15:50