Позвоните onClick fun в приложении onCreate fun and crash [Android] - PullRequest
0 голосов
/ 27 декабря 2018

Вот мой проект

Мое приложение получает широту и долготу при нажатии на Button, и результат отображается на некоторых TextView

в onCreate забавный код:

    icon_id.setOnClickListener(this)
    buildGoogleApiClient()

но теперь я хочу показать широту при запуске приложения, не нажимая на Button

, поэтому я удалил .setOnClickListener и позвонил onClick, но приложение не работает.

ЖУРНАЛ ОШИБКИ: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: main 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 голосов
/ 27 декабря 2018

Измените код внутри onClick() в отдельную функцию и вызовите ее из onClick() и onCreate()

. И убедитесь, что вы вызываете функцию после настройки GoogleApiClient

0 голосов
/ 27 декабря 2018

Насколько я понимаю, вы хотите показать широту и долготу, как только они станут доступны в приложении, вместо того, чтобы нажимать кнопку справа?

Что ж, вы ищете что-то другое.Вы ищете слушателя внутри элементов вашего приложения.Или, по крайней мере, это может быть решением.

На самом деле ваш код довольно близок к тому, что вы хотите, вам нужно только переместить вызовы от вашего метода onClick за его пределы и сделать это, возможно, onStart илисоздать метод для выполнения фактических вызовов.

0 голосов
/ 27 декабря 2018

Безопасно вызывать метод onClick без setOnclickListeners, журнал ошибок вставки очень поможет выяснить, что на самом деле произошло.

Проверьте мой код, он хорошо работает на моем телефоне.

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...