在onCreate有趣且崩溃的应用中调用onClick乐趣[Android]

时间:2018-12-27 06:42:42

标签: android kotlin google-api onclick

Here is my project

单击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)

3 个答案:

答案 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或创建一个方法来进行实际的调用