Java HashMap数据始终具有新数据

Java HashMap数据始终具有新数据,java,android,hashmap,Java,Android,Hashmap,我在一个方法中有一个并发hashmap,该方法持续不断地获取数据。我需要将此数据连续发送到服务器。hashmap是这样的- private Map<String, DefaultData> sensorData = new ConcurrentHashMap<String, DefaultData>(); //This is my method for taking data public void addMethodSensorData(long sensorType

我在一个方法中有一个并发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


}
methodinvoc{720.342=com.hi.TimerData@26621ad4}
methodinvoc{2016.342=com.hi.TimerData@7c7b512c}
正如您在上面的日志中看到的,旧数据也被添加到我不想要的新数据中。我需要这样的日志-

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


}
methodinvoc{720.342=com.hi.TimerData@26621ad4}
methodinvoc{2016.342=com.hi.TimerData@7c7b512c}

我不希望以前的数据与新数据一起出现。如何实现这一点?

如果希望在每次调用
addMethodSensorData
时清除映射,请添加

sensorData.clear();
在这个方法的开始

public void addMethodSensorData(long sensorTypeIdent, long methodIdent1, String prefix, MethodSensorData methodSensorData) {
    sensorData.clear();
    StringBuffer buffer = new StringBuffer();
    ...
}

或者,如果您仅在该方法中使用该映射,请将该方法的局部变量设置为
sensorData

如果映射中始终只有一项,为什么要使用该映射?调用
sensorData=new ConcurrentHashMap()
而不是
sensorData.clear()
在发送到服务器后在函数内执行一次。我使用MAP是因为buffer.toString()总是不同的,methodSensorData值也是不同的值
public void addMethodSensorData(long sensorTypeIdent, long methodIdent1, String prefix, MethodSensorData methodSensorData) {
    sensorData.clear();
    StringBuffer buffer = new StringBuffer();
    ...
}