Я столкнулся с довольно неприятной проблемой, пытаясь запрограммировать фрагмент кода, отвечающий за обнаружение устройств Bluetooth.
Согласно Android Studio этот фрагмент кода верен:
fun discoverDevices(): Observable<BluetoothDevice> {
val discovered: HashSet<BluetoothDevice> = HashSet()
return bluetoothUtil.startDiscovery()
.flatMapObservable { discoveryStarted ->
if(discoveryStarted) {
RxBroadcastReceiver.create(appContext, IntentFilter().apply {
addAction(BluetoothDevice.ACTION_FOUND)
addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)
})
} else {
Observable.error(Throwable("Discovery couldn't be started"))
}
}
.takeUntil { intent ->
intent.action == BluetoothAdapter.ACTION_DISCOVERY_FINISHED
}
.map { intent ->
var bluetoothDevice: BluetoothDevice? = null
if(intent.action == BluetoothDevice.ACTION_FOUND) {
bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
}
if(bluetoothDevice != null && !discovered.contains(bluetoothDevice))
bluetoothDevice
else
null
}
}
Функция объявляет, что возвращает Observable<BluetoothDevice>
, хотя ясно, что функция карты вернет BluetoothDevice?
.Кроме того, я пытаюсь заставить его отфильтровывать нулевые значения, добавляя
.filter {
it != null
}
в конец цепочки, условие it != null
выделяется как «всегда истинно», и возвращаемое значение внезапно становится * 1012.*.Это безумно печально, и я не могу найти решение этой странной проблемы.
Это ошибка в Android Studio или я что-то не так делаю?