Передача данных между Arduino и Android (Kotlin) по Bluetooth. Проблема с NPE - PullRequest
0 голосов
/ 12 ноября 2018

Я должен перенести несколько строк в Arduino. Просто проходи, ничего не бери. Это мой код. Я работаю с Android и Kotlin в первый раз.

class Validation : AppCompatActivity() {
lateinit var mmOutputStream: OutputStream
lateinit var mmSocket: BluetoothSocket

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_validation)


    resolve_Btn.setOnClickListener {bluetoothAdd() }


}

@SuppressLint("HardwareIds")
private fun bluetoothAdd() {
    val mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
    if (mBluetoothAdapter == null) {
        // Device does not support Bluetooth

        Log.e("Bluetooth ", "not found")
    }

    if (mBluetoothAdapter!!.isEnabled) {
        val pairedDevices = mBluetoothAdapter.bondedDevices
        // If there are paired devices
        if (pairedDevices.size > 0) {
            // Loop through paired devices
            for (device in pairedDevices) {
                mmSocket= device.createRfcommSocketToServiceRecord(
                        UUID.fromString("00000000-0000-1000-8000-00805F9B34FB"))
                mmSocket.connect()
                mmOutputStream = mmSocket.outputStream
                val message = "aaa"
                val msgBuffer = message.toByteArray(Charset.defaultCharset())
                mmOutputStream.write(msgBuffer)
                Log.e("Mac Addressess", "are:  " + mBluetoothAdapter.getRemoteDevice(device.address))

            }
        }
    }
}

}

Теперь, когда я добавил mmSocket !!. Connect (), я ловлю это

Вызывается: java.lang.reflect.InvocationTargetException в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:245) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921) Вызвано: java.io.IOException: чтение не удалось, сокет может быть закрыт или истекло время ожидания, чтение ret: -1 на android.bluetooth.BluetoothSocket.readAll (BluetoothSocket.java:706) на android.bluetooth.BluetoothSocket.readInt (BluetoothSocket.java:718) на android.bluetooth.BluetoothSocket.connect (BluetoothSocket.java:384) на com.example.nikita.vas.Validation.bluetoothAdd (Validation.kt: 52) на com.example.nikita.vas.Validation.access $ bluetoothAdd (Validation.kt: 21) на com.example.nikita.vas.Validation $ onCreate $ 1.onClick (Validation.kt: 30) на android.view.View.performClick (View.java:6291) на android.view.View $ PerformClick.run (View.java:24931) на android.os.Handler.handleCallback (Handler.java:808) на android.os.Handler.dispatchMessage (Handler.java:101) на android.os.Looper.loop (Looper.java:166)

1 Ответ

0 голосов
/ 12 ноября 2018

Вы забыли позвонить mmSocket.connect() до доступа к outputStream объекту. Попробуйте это:

 mmSocket= device.createRfcommSocketToServiceRecord( 
                    UUID.fromString("00000000-0000-1000-8000-00805F9B34FB"))
                    mmSocket.connect()
                    mmOutputStream = mmSocket!!.outputStream
                    val message = "aaa"
                    val msgBuffer = message.toByteArray(Charset.defaultCharset())
                    mmOutputStream!!.write(msgBuffer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...