单击Button
时我的应用会获得经度和纬度,并且结果会显示在某些TextView
上
在onCreate
有趣的代码中:
icon_id.setOnClickListener(this)
buildGoogleApiClient()
但是现在我想在启动应用程序时显示lat-long而不点击任何Button
所以我删除了.setOnClickListener
并直接致电onClick
,但应用程序崩溃了。
错误日志: 致命异常:主要 MainActivity.getLocation(MainActivity.kt:71)
private fun getLocation() {
mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient)
if (mLocation == null) {
startLocationUpdates()
}
if (mLocation != null) {
lat = mLocation!!.latitude
lon = mLocation!!.longitude
} else {
Toast.makeText(this, "location disabled", Toast.LENGTH_SHORT).show()
}
}
MainActivity.onClick(MainActivity.kt:56)
getLocation()
MainActivity.onCreate(MainActivity.kt:103)
var view = findViewById<View>(R.id.constraintLayout_id)
onClick(view)
答案 0 :(得分:1)
在没有setOnclickListeners的情况下调用onClick方法是安全的,粘贴错误日志将对发现实际情况有很大帮助。
检查我的代码,它可以在手机上正常工作。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
buildGoogleApiClient()
checkGps() }
private fun checkGps() {
if (!checkGPSEnabled()) {
return
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//Location Permission already granted
getLocation();
} else {
//Request Location Permission
checkLocationPermission()
}
} else {
getLocation();
}
}
答案 1 :(得分:0)
将onClick()
中的代码重构为一个单独的函数,然后从onClick()
和onCreate()
进行调用
并确保在设置GoogleApiClient
答案 2 :(得分:0)
据我所知,您想在应用中可用时立即显示纬度和经度,而不必单击右键?
好吧,您正在寻找不同的东西。您正在搜索应用程序元素内部的侦听器。至少这可以解决。
实际上,您的代码与您想要的代码非常接近,您只需要将来自您的onClick
方法的调用移出它的外部,然后执行onStart
或创建一个方法来进行实际的调用