Java (哈希-)映射有条目,get传递空值
我不知道这里发生了什么。我有一个HashMap,其键集大小为4:Java (哈希-)映射有条目,get传递空值,java,android,map,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_gerateid是枚举的值 此外,entrySet还提供了4个条目 steps.entrySet() (java.util.HashM
steps.keySet()
(java.util.HashMap$KeySet)
[INIT_FZLIST, INIT_DATA, INSTALL_DATABASE, PROMPT_GERAETEID]
INIT_FZLIST、INIT_DATA、INSTALL_DATABASE和PROMPT_gerateid是枚举的值
此外,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>();
有人知道是什么导致了这种行为吗?我完全卡住了。
任何提示都将不胜感激 您可以使用而不是HashMap
用于枚举类型键的专用映射实现。枚举映射中的所有键必须来自在创建映射时显式或隐式指定的单个枚举类型
就您的代码而言,请记住:
hashCode
在添加到映射后不应更改。需要很好地实现equals()
和hashCode()
获取(键)
对象的值之前实际放置(键、值)
该键的对象
可能在get之前更改了步骤,或者PUT在以后发生,或者您有两个步骤声明。什么是安装数据库,枚举?一串变量?什么类型的“INSTALL_DATABASE”?抱歉:私有枚举InstallSteps{INSTALL_DATABASE,PROMPT_gerateid,INIT_DATA,INIT_FZLIST,}当对同一对象的两个调用之间的
hashcode()
/equals()
方法不一致时,可能会发生这种行为。你能发布完整的枚举类内容吗?不,我没有。应该吗?hashCode()和equals(…)方法是枚举中的最终方法。它们就是不能被推翻。它甚至没有意义,因为枚举的值是单例的。@Seelenvirtuose谢谢;删除了保留w.r.t.哈希代码(很难无意中生成一个不起作用的哈希代码)。1)我使用了Eclipse。PendingCheckbox的字段是Android视图和另一个枚举值。所以它应该是正确的。2) 可以看到步骤。entrySet()显示了映射中包含的键。
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);