Android中的HashMap奇数行为

时间:2015-02-16 02:14:14

标签: java android

我为Android应用程序创建了一个HashMap,并根据需要使用下面的addVaue()函数添加对象。当添加一个新值时,包含3个先前添加的哈希表会更改内存中的表,最终会删除最近插入的值(样本中的名称)。我已经包含了显示" objectAttributes"。

表的调试器图像
private Map<String, Object> objectAttributes=new HashMap<String, Object>();

public void addValue(String key, String value) throws InvalidMessageExcption
{
  if(hasAttribute(key)) {
    try {
      JSONArray jArray = new JSONArray(value);
      objectAttributes.put(key, jArray);
    }
    catch(JSONException je) {
      objectAttributes.put(key, value);
    }
  }
  else
    throw new InvalidMessageExcption();
  }

调试器哈希表添加前:

[0] id - "123"  
[1] address - "10 Anystreet St"  
[2] null  
[3] name - "Test Name"  

添加后的调试器哈希表:

[0] id - "123"  
[1] null  
[2] null  
[3] null  
[4] null  
[5] address - "10 Anystreet St"  
[6] null  
[7] contacts - [JSONArray]  

调试器视图之间调用的唯一代码是 objectAttributes.put(key,jArray); 行。由add触发的表的扩展会丢弃最后一个值;扩展逻辑似乎有缺陷。

有没有人经历过这个和/或对发生的事情以及如何避免提出建议?

2 个答案:

答案 0 :(得分:0)

在&#39; addValue&#39;的开头添加一行Log.d(TAG, "value=" + value);。查看是否将空值传递给addValue

答案 1 :(得分:0)

我唯一能想到的就是在某处调用HashMap的remove()方法。

也许在remove()方法中放置一个调试停止点来检查这是否确实发生了什么?

编辑:此外,您确定要查看包含objectAttributes的类的相同实例吗?也许包含类有多个实例?