저는 최근에 간단한 키 값 맵에 게시하여 일부 데이터 구조를 단순화하려고했습니다. 나는 로그를 push하여 값이 .put 메소드 동안 키와 연관되어 있는지 확인한다.안드로이드 간단한 해시 맵은 값을 유지하지 않습니까?
나중에 .get을 호출하면 값을 더 이상 사용할 수 없습니다. 중요 코드 조각 : 예상대로
MainActivity.class
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 방법에 VideoPlayer.class
MainActivity setter = new MainActivity();
setter.setHashmap(urlString, player.getCurrentPosition());
는 로그가 제대로 URL과 시간을 출력한다. 그러나 resumeMap.containsKey (url)는 디버거가 "값을 찾을 수 없습니다!"라는 예상 일치 키를 확인하는 동안에도 false로 유지됩니다. 산출.
MainActivity에서 처음으로 통과하는 동안 결과를 찾을 수 없을 것으로 예상되므로 VideoPlayer 클래스는 resumeTime을 0으로하여 적절한 결과를 얻어 호출됩니다. 키와 값의 설정을 확인합니다. 동일한 링크를 열었을 때 여전히 0을받습니다.
저는 원래 Hashmap을 동일한 클래스로 만들었습니다. 결과는 같았습니다. MainActivity로 맵을 옮겨서 디버깅했습니다. 도움을 주셔서 감사합니다.
이 경우'resumeMap.containsKey' 코드가 배치됩니다 (http://developer.android.com/training/basics/activity-lifecycle/recreating.html 참조)
onSaveInstanceState
및onRestoreInstanceState
를 사용하여 주변의 정보를 전달? 아무데도 거기에 떠있을 수 없습니다 :) 당신의 확실한'url'은 여러분이 기대하는 것을 담고 있습니까? 디버거는 그 가치에 대해 무엇이라고 말합니까? – m0skit0네, 죄송합니다. 저는 정말로 관련성이있는 부분들을 잡았습니다. resumeMap.containsKey는 shouldOverrideUrlLoading 이벤트에 있습니다. 예, Log.i의 출력 URL ("값을 찾을 수 없습니다!", ""+ url); setter의 url 값과 동일합니다. Log.i ("Setting :", "URL :"+ url); – Chad
첫 번째 패스와 두 번째 패스 사이의 시간은 어떻게됩니까? 액티비티 인스턴스가 파기되어 다시 생성되지 않았습니까? –