从Infinite Observable创建列表包

时间:2017-01-12 23:40:40

标签: android rx-java

我有一个方法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中的每个列表都有相同的项目。

1 个答案:

答案 0 :(得分: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();