所以我有一个(也许是微不足道的)无法解决的问题。因此,我正在使用 Android(传感器等为 standard libraries )设备收集一些传感器数据,如下所示(几乎是标准的):
private final SensorEventListener MultiSensorListener
= new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
// Printing of data to screen happens here. File will be written here async.
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
String sensorReading = "\nLight Reading: " + String.valueOf(event.values[0]);
side_output.append(sensorReading);
}
//previous code, let's assume that both or any one has been done
if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
//textLIGHT_reading.setText("LIGHT: " + event.values[0]);
side_output.append("\nProximity Reading: " + String.valueOf(event.values[0]));
}
if()...
// Many more can go
}
};
所以我想要的是这样的:首先,当触发 onSensorChanged(SensorEvent event)
时,首先获取所有传感器值 event.values[index]
,然后创建一个string
表(csv,可能存储在静态变量中)。
对于下面的示例,我们假设第一个是加速度计
,然后是陀螺仪
,最后是环境光
等。即:
+--------------------+--------------------+--------------------+
| event.values[0] | event.values[0] | event.values[0] |
+--------------------+--------------------+--------------------+
| event.values[new] | copy from previous | copy from previous |
+--------------------+--------------------+--------------------+
| copy from previous | event.values[new] | copy from previous |
+--------------------+--------------------+--------------------+
这里发生的是:
- 使用第一个读取的值填充第一行
- 对于每个
onSensorChanged(SensorEvent event)
,都会更新该特定传感器的行,并从之前的传感器复制未更改的值。
如何做到这一点?我尝试了字符串操作并使用 +=
但事实是对于大量数据,处理正在成为一个大问题,我真的不希望我的数据收集为此而变慢!
感谢和问候。
最佳答案
您可以向传感器监听器或使用匿名类实例化的任何其他对象添加方法,然后在逻辑中调用这些日志记录方法:
private final SensorEventListener MultiSensorListener
= new SensorEventListener() {
// the overriden methods here ...
private Map<String, String> map = new HashMap<>();
private void logHistory(String key, String value) {
// ...
// for example:
map.put(key, value);
}
private Map<String, String> getLoggedHistory() {
Map<String, String> mapCopy = new HashMap<>();
mapCopy.putAll(map);
return mapCopy;
}
...
// Printing of data to screen happens here. File will be written here async.
@Override
public void onSensorChanged(SensorEvent event) {
...
// log event:
map.put(event.getId(), event); // just an example
}
关于java - 写入文本复制以前的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39259700/