2013-12-16 40 views
0

我必須對我的listview的更多項目做一個動作,所以我創建一個HashMap與所選應用程序的名稱(在我的列表中)和相對位置。hashmap並從中檢索數據

public void createHashMap(String name, int mPosition) { 
    // TODO Auto-generated method stub 
    mHashMap = new HashMap<String, Integer>(); 
    mHashMap.put(name, mPosition); 
    Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show(); 

} 
我在活動課的onItemClick

 adapter.createHashMap(itemName, mPosition); 

所以,當我在一排點擊-i顯示了正確的信息敬酒現在,我需要找回數據到HashMap和我寫的這

public void retrieveHashMap() { 
    Iterator myVeryOwnIterator = mHashMap.keySet().iterator(); 
    while(myVeryOwnIterator.hasNext()) { 
     String key=(String)myVeryOwnIterator.next(); 
     int value= mHashMap.get(key); 
     Toast.makeText(context, "Key: "+key+" Value: "+value, Toast.LENGTH_LONG).show(); 
    } 

} 

這項工作,但是當我調用retrieveHashMap方法我只顯示最後一個插入值。我如何顯示所有插入的值?

+0

我想,你的敬酒正在被覆蓋,因爲這是在循環中完成的。考慮在循環之外移動。 –

+0

@ user3103764我已經更新了我的答案。你可以檢查它並告訴我它是否無法工作(也許你應該爲我提供你插入的數據)。 – R4j

回答

0

看起來像你的問題,現有的mHashMap是你初始化每一次新的哈希映射。這就是爲什麼你只有最後一個值。試試這個:

public void createHashMap(String name, int mPosition) { 
// init it only one time. 
if(mHashMap == null){ 
    mHashMap = new HashMap<String, Integer>(); 
} 
mHashMap.put(name, mPosition); 
Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show(); 

}

而且土司有一個持續時間,所以你不應該叫了很多次。如果你嘗試寫日誌,你應該使用logcat。

更新:另一個原因,也許你的數據有重複的名稱值。嘗試調試或寫入logcat,看看你是否有插入許多name數據具有相同的值。因爲哈希映射不被接受爲重複鍵。 例如:

mHashMap.put("test", 2); 
    mHashMap.put("test", 3); // it will replace the item ["test" - 2] by ["test" - 3]. That's why you got only the last one. 

,並確保您的迭代器應該是這樣的:

Iterator<String> myVeryOwnIterator = mHashMap.keySet().iterator(); 
    while(myVeryOwnIterator.hasNext()) { 
     String key=(String)myVeryOwnIterator.next(); 
     int value= mHashMap.get(key); 
     System.out.println(key + " " + value); 
    } 

希望這有助於!

+0

問題依然存在..顯示總是最後一個插入值:-( – user3103764

+0

爲什麼你需要顯示多少次烤麪包?它有延遲時間正在被覆蓋,使用Logcat寫入日誌,並看到它可以打印出所有的結果,或者你應該在textview中寫入結果 – R4j

1

Toast.makeText移到while循環之外,並使用迭代的鍵在循環內創建想要的消息。

你還需要檢查你是否覆蓋createHashMap()

+0

我搬出了循環,但錯誤仍然存​​在...我想檢索所有插入的值 – user3103764

0

當您使用此方法

public void createHashMap(String name, int mPosition) { 
// TODO Auto-generated method stub 
mHashMap = new HashMap<String, Integer>(); 
mHashMap.put(name, mPosition); 
Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show(); 

}

你要保存的HashMap或吐司實例。 當呼叫

mHashMap = new HashMap<String, Integer>(); 

和實例調用

Toast.makeText(context, name+": "+mPosition, Toast.LENGTH_LONG).show(); 

刷新(重新創建)的所有數據。

+0

如何刷新數據和實例 – user3103764

+0

@ user3103764看起來像你是一個業餘的Java程序員,你必須知道java中的活動範圍變量,當你調用方法和實例在方法中創建時,如果沒有從方法返回實例,實例被殺死,你不能訪問實例 – Jeus

+0

因爲他告訴我他在嘗試我的方式時遇到了同樣的問題(每次都停止創建新實例),所以我認爲問題是他的關鍵數據可以重複,並且哈希映射不會不允許重複密鑰。 – R4j

0

看起來您每次調用createHashMap方法時都重置mHashMap: mHashMap = new HashMap();

相反,只有在聲明mHashMap(作爲類成員)的情況下,應該只有這個地方,然後在createHashMap中只有「mHashMap.put(name,mPosition)」部分。

+0

我試過了,但問題仍然存在......我認爲問題在於,因爲我有設備上所有已安裝應用程序的列表,當我點擊其中三個例子時,所有三個都必須放入hashmap動態。我怎麼辦?例如與一個for循環,但如何? – user3103764