2015-05-04 102 views
3

我必須在SQLite上使用Keyset存儲HashMap值,並在應用程序重新啓動時使用共享首選項重新使用。如何將HashMap <Integer,ArrayList <String>>存儲到SQLite?

HashMap<Integer, ArrayList<String>> hashMap; 
hashMap = new HashMap<>(); 
//Insert Value 
hashMap.put(btn.getId(), listValue); 
// Read a Value 
Map.Entry<Integer, ArrayList<String>> entry = (Map.Entry<Integer, ArrayList<String>>) iteratorMap.next(); 

for (Integer ihashId :hashMap.keySet()) { 
    if(btnid == ihashId) 
    { 
     Set<Map.Entry<Integer, ArrayList<String>>> setMap = hashMap.entrySet(); 
     Iterator<Map.Entry<Integer, ArrayList<String>>> iteratorMap = setMap.iterator(); 
     while (iteratorMap.hasNext()) { 
      Map.Entry<Integer, ArrayList<String>> entry = (Map.Entry<Integer, ArrayList<String>>) iteratorMap.next(); 
      ArrayList<String> values = entry.getValue(); 
      if (btnId == entry.getKey()) { 
       getSetName.setText(values.get(0)); 
       getSetAddress.setText(values.get(1)); 
       getSetPin.setText(values.get(2)); 
       getSetValue.setText(values.get(3)); 
     } 
    } 

} 
+0

有多大是你的數組列表? – dit

+0

這是ArrayList的一個可怕的用法。 –

+0

@ AC-OpenSource在SQLite中,讀取散列值 hashDb = setValue.hashMapValue; setMap = setValue.hashMapValue.entrySet(); iteratorMap = setMap.iterator(); (iteratorMap.hasNext())entry =(Map.Entry >)iteratorMap.next(); values = entry.getValue(); content.put(Name,getValue.name); content.put(Address,getValue.address); content.put(Pin,getValue.pin_Detail); content.put(Value,getValue.valu); }還有共同的列values.how插入每條記錄? –

回答

0

原始答案編輯之前的:
HashMap中已序列化,所以你可以在你的SQLite數據庫作爲BLOB直接存儲HashMap中。儘管在反序列化之前,您將無法閱讀它的內容。

編輯:
你應該把長時間運行的操作放在異步任務中。如果您希望對變量的引用保留配置更改,則應該使用片段並使用setRetainInstance(true),儘管無論保留對AsyncTask的引用,它都獨立於UI線程並將繼續運行。

邊注意:
使用ArrayList時總是使用手動計數循環,因爲它具有更好的性能。

可以看出在this comparison,利用與反循環設置爲數組的大小比爲每個循環顯著快:

private static List<Integer> list = new ArrayList<>(); 
for(int j = list.size(); j > size ; j--) 
{ 
    //do stuff 
} 
+0

評論不適用於擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/76994/discussion-on-answer-by-ac-opensource-how-to-store-hashmapinteger-arrayliststr)。 – Taryn

相關問題