2017-01-12 4 views
1

У меня есть метод Observable<SensorEvent> dataFromSensor(), который возвращает бесконечный поток SensorEvents. Мне нужно собрать их в списки с 20 событиями датчиков. Как я могу это получить? buffer(20) не работает, он возвращает списки с 20 элементами, но каждый элемент в этом списке одинаковый.Создание списков списка из бесконечного наблюдаемого

Подробнее Код:

С RxSensors

final RxSensorManager sensorManager = new RxSensorManager(oldSensorManager); 
sensorManager.observeSensor(Sensor.TYPE_ACCELEROMETER, SensorManager.SENSOR_DELAY_FASTEST) 
.buffer(20) 
.onSubscribe(/*onNext, onError, onCompleted omitted*/) 

но нет никакой разницы, если я создаю его с Observable.fromAsync() и SensorManager обратного вызова или RxSensors. В каждом списке в onSubscribe есть такие же предметы.

+0

укажите свой код. буфер должен работать нормально, может быть, в каком-то другом месте. или предметы действительно такие же –

+0

добавлено еще код @PogonetsAnton – JakeT

ответ

1

Похоже, SensorManager изменить такой же SensorEvent каждый раз. Попробуйте добавить клон так же, как и материал перед буфером.

Например:

sensorManager.observeSensor(Sensor.TYPE_ACCELEROMETER, SensorManager.SENSOR_DELAY_FASTEST) 
      .map(sensorEvent -> { 
       List<Float> copy = new ArrayList<>(); 

       for (float value : sensorEvent.values) { 
        copy.add(value); 
       } 

       return copy; 
      }) 
      .buffer(20) 
      .subscribe(); 
+0

yep, working! Большое спасибо! – JakeT

Смежные вопросы