我在一个持续不断获取数据的方法中有一个并发的hashmap。我需要将这些数据连续发送到服务器。 hashmap就像这样 -
private Map<String, DefaultData> sensorData = new ConcurrentHashMap<String, DefaultData>();
//This is my method for taking data
public void addMethodSensorData(long sensorTypeIdent, long methodIdent1, String prefix, MethodSensorData methodSensorData) {
StringBuffer buffer = new StringBuffer();
if (null != prefix) {
buffer.append(prefix);
buffer.append('.');
}
buffer.append(methodIdent1);
buffer.append('.');
buffer.append(sensorTypeIdent);
sensorData.put(buffer.toString(), methodSensorData);
Log.d("hi", "methodinvoc" + sensorData);
//Methods
List<DefaultData> tempList2 = new ArrayList<DefaultData>(sensorData.values());
Log.d("hi", "tempList2" + tempList2);
kry1.sendDataObjects(tempList2);//Data sent to server
}
methodIdent1的值每次都不同,但sensorTypeIdent始终相同。截至目前的日志是 -
methodinvoc{720.342=com.hi.TimerData@26621ad4}
methodinvoc{2016.342=com.hi.TimerData@7c7b512c, 720.342=com.hi.TimerData@26621ad4}
正如您在上面的日志中看到的那样,旧数据也被添加到我不想要的新数据中。我需要这样的日志 -
methodinvoc{720.342=com.hi.TimerData@26621ad4}
methodinvoc{2016.342=com.hi.TimerData@7c7b512c}
我不希望以前的数据与新数据一起出现。我如何实现这一目标?
答案 0 :(得分:2)
如果您希望每次调用addMethodSensorData
时清除地图,请添加
sensorData.clear();
在该方法的开头。
public void addMethodSensorData(long sensorTypeIdent, long methodIdent1, String prefix, MethodSensorData methodSensorData) {
sensorData.clear();
StringBuffer buffer = new StringBuffer();
...
}
或者,如果您只在该方法中使用Map
,请将sensorData
设为该方法的局部变量。