@Scorpiored88

Как вернуть результат с треда в колбеке?

Всем доброго!
Прошу строго не ругать и пожалуйста помочь, наверное для кого то это совсем не тривиальная задача.
Пишу приложения на Flutter, но тепер надо его использовать на специфическом Android устройстве, для этого мне пришлось использовать нативную часть Kotlin(которого пока не пришлось изучать).

Для этого в приложении есть специальный нативны клас который передает результат в Flutter. В нем надо писать на Kotlin.
И тут следующая задача. Есть у меня функция:

private fun readCardFn()  {
        var cardNumber : String
        val CurAppDir: String = getApplicationContext().getFilesDir().getAbsolutePath()


        SystemApi.SystemInit_Api(
            0,
            CommonConvert.StringToBytes("$CurAppDir/\u0000"),
            getApplicationContext(),
            object : ISdkStatue {
                override fun sdkInitSuccessed() {
                    Log.e("initSDK", "success")
                    PiccApi.PiccClose_Api()
                    var ret = PiccApi.PiccOpen_Api()
                    thread(start = true) {
                        while (sloted_card == true) {
                            var timerid = 0
                            timerid = SystemApi.TimerSet_Api()
                            cardType = ByteArray(2)
                            serialNo = ByteArray(12)
                            while (SystemApi.TimerCheck_Api(timerid, 100 * 1000) == 0) {
                                picccardflag = false
                                val status = PiccApi.PiccCheck_Api(CARD_TYPE_M1, cardType, serialNo)
                                if (status == 0) {
                                    cardNumber = CommonConvert.bcdToASCString(serialNo)
                                    PiccApi.PiccClose_Api()
                                    sloted_card = false
                                    break
                                }

                            }
                            PiccApi.PiccClose_Api()
                        }

                    }

                }

                override fun sdkInitFailed() {
                    Log.e("initSDK", "fail")
                }
            })
        
    }


Чесно говоря, собирал ее с example, которий шел с SDK, поетому могут быть ошибки, но выводить в консоль cardNumber все же получается.

Я так понимаю что у меня тут первым идет колбек :

SystemApi.SystemInit_Api(
            0,
            CommonConvert.StringToBytes("$CurAppDir/\u0000"),
            getApplicationContext(),
            object : ISdkStatue {
                override fun sdkInitSuccessed() {
                    Log.e("initSDK", "success")


Дальше тред в котором цикл.

Вопрос: как мне возвращать cardNumber при вызове функции readCardFn, мне уже понятно что простым return тут не обойтись?
Помогите пожалуйста
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
Jacen11
@Jacen11
сделать cardNumber liveData, flow или тому подобное. А там где нужно использовать подписаться на поле
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы