Сбой приложения при попытке чтения / записи данных в Arduino Mega и запуска действия, отличного от него, в методе fixedRateTimer - PullRequest
0 голосов
/ 29 сентября 2019
 fun writeDataToMega() {
            fixedRateTimer("default", false, 0L, 1000){
                sendData()
                if(itemsDispatched == itemsToDispatch){
                    disconnect()
                    var intent = Intent(this@ItemDispenseActivity, HomeBnActivity::class.java)
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                    startActivity(intent)
                    cancel()
                    finish()
                }
            }
        }
 private fun sendData() {
        try {
            if (mBluetoothSocket != null) {
                outputStream = mBluetoothSocket!!.outputStream
                var arr: ByteArray
                when (receivedDataFromMega) {
                    48 -> {
                        sendDataToMega = "ai"
                        DataOutputStream(outputStream).writeBytes(sendDataToMega)
                        itemsDispatched += 1
                        Timer().schedule(object : TimerTask() {
                            override fun run() {
                                sendDataToMega = "12"
                                arr = byteArrayOf(sendDataToMega.toByte())
                                DataOutputStream(outputStream).write(arr)
                                cancel()
                            }
                        }, 15000)
                    }
                    46, 51 -> {
                        sendDataToMega = "02"
                        arr = byteArrayOf(sendDataToMega.toByte())
                        DataOutputStream(outputStream).write(arr)
                    }
                    else -> {
                        sendDataToMega = "12"
                        arr = byteArrayOf(sendDataToMega.toByte())
                        DataOutputStream(outputStream).write(arr)
                    }
                }
                inputStream = mBluetoothSocket!!.inputStream
                receivedDataFromMega = DataInputStream(inputStream).read()
            }
        }catch ( e : IOException){
            e.printStackTrace()
        }
    }


private fun disconnect() {
        if (mBluetoothSocket != null) {
            try {
                mBluetoothSocket!!.close()
                mBluetoothSocket = null
                mIsConnected = false
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

Я пишу, считываю данные из модуля HC-05 с помощью Kotlin, после выдачи x элементов. Я хочу остановить обработку, отключиться от Bluetooth и перейти на домашнюю страницу пользователя, но приложение вылетает при использовании Intent вМетод fixedRateTimer.До логики выдачи предметов она работает нормально, но вылетает по Намерению.

Ошибка

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
        at android.app.Activity.startActivityForResult(Activity.java:4091)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
        at android.app.Activity.startActivityForResult(Activity.java:4038)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
        at android.app.Activity.startActivity(Activity.java:4362)
        at android.app.Activity.startActivity(Activity.java:4330)
        at com.example.grabbit.bluetooth.ItemDispenseActivity$writeDataToMega$$inlined$fixedRateTimer$1.run(Timer.kt:154)
        at java.util.Timer$TimerImpl.run(Timer.java:284)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...