(哈希 - )地图有条目,得到无效

时间:2013-07-15 09:26:36

标签: java android map

我不知道这里发生了什么。我有一个HashMap,其中包含以下大小为4的键集:

steps.keySet()
(java.util.HashMap$KeySet)
[INIT_FZLIST, INIT_DATA, INSTALL_DATABASE, PROMPT_GERAETEID]

INIT_FZLIST,INIT_DATA,INSTALL_DATABASE和PROMPT_GERAETEID是枚举的值。

此外,entrySet还提供了4个条目。

steps.entrySet()
(java.util.HashMap$EntrySet)
[INIT_FZLIST=de.ansat.terminal.activity.widgets.PendingCheckbox{b50cb4e0 V.E..... ......I. 24,524-456,666},
 INIT_DATA=de.ansat.terminal.activity.widgets.PendingCheckbox{b50c8748 V.E..... ......I. 24,350-456,524},
 INSTALL_DATABASE=de.ansat.terminal.activity.widgets.PendingCheckbox{b508e288 V.E..... ......I. 24,68-456,209},
 PROMPT_GERAETEID=de.ansat.terminal.activity.widgets.PendingCheckbox{b50c59b0 V.E..... ......I. 24,209-456,350}]

但如果我这样做:

steps.get(INSTALL_DATABASE)
 null

映射返回null,因为如果我尝试使用生成的对象,我会得到nullpointerexception。

这是在Android活动中运行的。 我在API Level 17上使用Android 4.2.2

[编辑]

private Map<InstallSteps, PendingCheckbox> steps = new HashMap<InstallSteps, PendingCheckbox>();

是我的活动类的一个字段。

我在该地图上有几个AsyncTasks,因为它代表了安装过程的进度。

PendingCheckbox是一个扩展LinearLayout的视图。

[EDIT2] 步骤以这种方式填写onCreate(..):

    PendingCheckbox installDb = new PendingCheckbox(InstallActivity.this);
    installDb.setText(INSTALL_DATABASE);
    installDb.setChecked(false);
    installDb.setLayoutParams(layoutParams);
    root.addView(installDb);
    steps.put(InstallSteps.INSTALL_DATABASE, installDb);

有谁知道可能导致这种行为的原因是什么?我完全卡住了。 任何提示将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以使用EnumMap代替HashMap

  

用于枚举类型键的专用Map实现。枚举映射中的所有键必须来自创建映射时显式或隐式指定的单个枚举类型。

就您的代码而言,请记住:

  1. 地图中的hashCode对象一旦添加到地图中,就不应该更改。 equals()的良好实施是必需的。

  2. hashCode()put(key,value)之前,检查您是否确实keyget(key)个对象。

答案 1 :(得分:0)

也许在get之前更改了step,或者稍后发生了puts,或者你有两个步骤声明。