2011-04-25 35 views
3

使用資源文件,創建一個大的HashMap當HashMap的> 512

HashMap<String, String> bigHash = new HashMap<String, String>(); 
public void createHash(){ 
    String [] items = getResources().getStringArray(R.array.dual_strings); 
    String [] temp; 
    for (String s : items){ 
     temp = s.split("@"); 
     bigHash.put(temp[0],temp[1]); 
    } 
} 

dual_string.xml JNI溢出就像 全志「睡眠@更好的睡眠,每天超過6小時」

但是,我嘗試了一個大的(〜1000項)dual_strings.xml文件和應用程序在啓動後立即崩潰。在LogCag 展望「dalvikvm未能增加JNI本地參考表(有512項)」

有什麼我能做的創造和我長的資源文件使用一個大哈希? 謝謝

回答

2

這看起來像是Android的本地代碼getStringArrayResources中的錯誤。我發現這裏已經有一個bug了。很容易在本地代碼中看到這個原因(引用是在循環中創建的,但未被清除)。

http://code.google.com/p/android/issues/detail?id=5287&q=getArrayStringResource&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

現在,你就必須解決這個bug。你必須將你的字符串數組分割成更小的塊,每個塊的大小爲<,或者編寫你自己的自定義字符串數組加載方法。也許別人可以想出一個更好的解決方案。

+0

謝謝。但是,當我將散列鍵提供給AutoCompleteTextView適配器時,我無法拆分成更小的塊。鏈接說問題已經修復與android 2.3,我會試試這個。 我不知道什麼是Android的錯誤,如這樣的谷歌政策:<2.3版本將被修復? – DrWolf 2011-04-25 09:17:50

+1

好吧,它適用於2.3(~1.2k散列) – DrWolf 2011-04-25 11:40:20

+0

如果上面的文章中的代碼指示您正在做什麼,您應該能夠將資源文件拆分爲多個資源。您正在構建傳遞適配器的散列表,因此只需從2或3個不同的資源文件中構建適配器2或3次。這是一個getStringArray方法,因爲太多的項目而不是適配器代碼而崩潰。 – 2011-04-25 18:22:49

相關問題