0

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

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 级别 17 上使用 Android 4.2.2

[编辑]

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

是我活动课的一个领域。

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

PendingCheckbox 是一个扩展 LinearLayout 的 View。

[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);

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

4

2 回答 2

2

您可以使用EnumMap而不是HashMap.

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

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

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

  2. 在ing 它的值之前检查你是否真的是put(key,value)一个带有那个的对象。keyget(key)

于 2013-07-15T09:30:31.713 回答
0

可能在获取之前更改了步骤,或者稍后发生了放置,或者您有两个步骤声明。

于 2013-07-15T09:36:20.263 回答