2011-04-25 31 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

相关问题