Как заставить функцию выполняться после того, как другая успешно завершена в Kotlin? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть эта функция для создания закусочной с действием:

private fun setupSnackbar(view: View) {
        if (isConnected) {
            showSnackbar(view, Strings.connected, TSnackbar.LENGTH_SHORT)
        } else {
            showSnackbar(view, Strings.notConnected,
            TSnackbar.LENGTH_INDEFINITE).setActionTextColor(
            ContextCompat.getColor(this, R.color.lightGreyBlue)).setAction("Connect") {
                checkBluetoothState()
                connectToProxy()
            }.show()
        }
    }

private fun checkBluetoothState() {
        if (!bluetoothAdapter.isEnabled()) {
            val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
        }
}


Я намерен выполнить connectToProxy () только после завершения checkBluetoothState () (и BT включен). Прямо сейчас им звонят одновременно. Я знаю, что мне нужна здесь функция обратного вызова, но я не знаю, как ее написать.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вам нужно реализовать onActivityResult, в котором вы получите ответ о действии Bluetooth, я выполнил для вас базовое задание, в котором я запрашиваю Bluetooth по щелчку мыши.

 btnBluetooth.setOnClickListener {
        val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
    }

Вы получитеполучить результат в onActivityResult.

я назначил REQUEST_ENABLE_BT = 1, вы можете изменить значение.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if(requestCode==REQUEST_ENABLE_BT && resultCode == RESULT_OK)
    {
        callYourFunction()
    }
}

private fun callYourFunction() {

    Toast.makeText(applicationContext,"Done",Toast.LENGTH_SHORT).show()
}

enter image description here

0 голосов
/ 24 октября 2019

Ваш checkBluetoothState() принимает параметр, подобный этому, и completion() в конце или после завершения функции

fun checkBluetoothState(completion: ()->Unit){


if (!bluetoothAdapter.isEnabled()) {
            val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
        }else{
           completion()
           } 
}

и в setupSnackbar вызов метода, как показано ниже

    checkBluetoothState { 
           connectToProxy()
 }

Длябольше проверить эту ссылку документы https://kotlinlang.org/docs/reference/lambdas.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...