Android简单Hashmap不维护值?

Android简单Hashmap不维护值?,android,hashmap,Android,Hashmap,我最近试图通过将一些数据结构发布到一个简单的键、值映射中来简化它们。在.put方法期间,我推送一个日志以验证该值是否已与该键关联 稍后调用.get时,该值不再可用。重要代码片段: 主课 public final HashMap<String, Integer> resumeMap = new HashMap<String, Integer>(); if (resumeMap.containsKey(url)) { Log.

我最近试图通过将一些数据结构发布到一个简单的键、值映射中来简化它们。在.put方法期间,我推送一个日志以验证该值是否已与该键关联

稍后调用.get时,该值不再可用。重要代码片段:

主课

public final HashMap<String, Integer> resumeMap = new HashMap<String, Integer>();

        if (resumeMap.containsKey(url)) {
                Log.i("Value is there!", url);
                resumeTime = resumeMap.get(url);
                Log.i("Value set to:", "" + resumeTime);
            } else {
                resumeTime = 0;
                Log.i("Value is not found!", "" + url);
            }

public void setHashmap(String url, Integer time) {
    resumeMap.put(url, time);
    int newTime = resumeMap.get(url);
    Log.i("Setting:", "URL: " + url);
    Log.i("Setting:", "TIME:" + newTime);
}
在setHashmap方法中,日志按照预期正确输出url和时间。但是,即使调试器通过“未找到值!”输出确认预期的匹配键,resumeMap.containsKey(url)仍然为false

为了说明这一点,在MainActivity的第一个过程中,我希望得到一个未找到的结果,然后调用VideoPlayer类,resumeTime为0,结果正确。我验证键和值的设置,当我打开同一链接时,仍然收到0


我最初在Hashmap自己的类中构建了Hashmap,得到了相同的结果。我将映射移动到MainActivity只是为了调试。感谢您提供的任何帮助。

活动实例会一直被快速销毁和重新创建,例如,当您旋转屏幕时(但也出于其他原因)。通常看起来活动“仍然存在”,但实际的底层对象实例已被销毁并重新创建


在进入实例状态束路径之前,验证这是否真的是问题所在的一种快速方法是使HashMap保持静态,以防止实例破坏破坏它


有时,像这样的
静态
映射是可以的,但要小心操作,因为这样的结构会为到处泄漏内存开辟道路。更好的方法是使用某种持久性,或者如果您只需要在使用活动时使用信息,请使用
onSaveInstanceState
onRestoreInstanceState
(请参见)

哪里有
resumeMap.containsKey
代码放置?它不可能在任何地方浮动:)您确定
url
包含您希望它包含的内容吗?调试器如何评价它的价值?是的,很抱歉,我只是抓住了真正相关的部分。resumeMap.containsKey处于shouldOverrideUrlLoading事件中。是,Log.i的url输出(“找不到值!”,“+url”);与setter-Log.i中的url值相同(“设置:”,“url:+url”);第一次和第二次之间是几点?您确定您的活动实例没有被销毁和重新创建吗?活动实例会一直快速销毁和重新创建,例如,当您旋转屏幕时。一般来说,您应该使用实例状态来保存这样的信息。在进入实例状态束路径之前,验证这是否真的是问题所在的一种快速方法是使HashMap
静态
,以防止实例破坏破坏它。
MainActivity setter = new MainActivity();
setter.setHashmap(urlString, player.getCurrentPosition());