Android开发:字符串数组资源过大,导致Android应用程序崩溃!

3

我有一个字符串数组资源,大约有1000个药品名称。

<string-array name="index">
<item>Aspirin</item>
  <item>Levitra</item>
  ....
</string-array>

我尝试将这个字符串数组加载到活动中的String[]中。 使用Google的Java文档提供的相同语法,可以在此处找到。 http://developer.android.com/guide/topics/resources/string-resource.html#StringArray
Resources res = getResources();
String[] drugs = res.getStringArray(R.array.index);

似乎我的字符串数组有太多的记录,导致我的应用程序崩溃(堆栈溢出?)。当我将字符串数组资源减少到约506个记录时,应用程序再次正常工作,但是添加一个以上的元素到字符串数组中将会导致应用程序崩溃。
我该怎么办?我想编写逻辑来过滤和处理列表。我在应用程序中没有SQL数据库,因此无法在数据库中进行处理。有没有一种方法可以迭代字符串数组资源而不将其加载到String[]中?我注意到这个资源是一个指针。或者是否有其他的数据结构或方法可以解决问题?
谢谢。

我有一个字符串数组资源,其中包含约1000个药品名称。-- 为什么?通过字符串数组,您能获得什么价值,而普通的XML资源无法满足呢? - CommonsWare
@CommonsWare 谢谢,干杯!我正在使用string-array资源,因为这是Google自己的教程中加载记录到ListView的首选方式。当我将所有记录按其起始字母分解时,一切都很好。现在我正在尝试实现搜索功能,所以我理想上希望能够一次迭代所有记录,而不是为每个起始字母做一个循环。我不熟悉Android中的内存分配架构,但有点惊讶于将506个记录加载到String[]中会导致应用程序崩溃:p - Mashsensor
如果有一种方法可以在不先将其按值加载到数据结构中的情况下遍历R.arrays中的字符串数组资源,那将是很棒的... :D,或者也许向量或链接列表将能够容纳更多数据?也许我只需要创建一个SQLite数据库并在那里处理它,或者最终只需在我的搜索方法中遍历所有26个字母表。顺便说一句,感恩节快乐 - Mashsensor
2个回答

1

你不想使用SQL数据库的原因是什么?我强烈建议设置SQLite数据库。字符串数组不是为这么大的数据设计的。你的应用程序会很慢,并且会消耗大量内存。

我能想到的唯一替代方案是使用单个字符串,然后有一个字符串ID值的数组 - 那应该可以工作。


谢谢您的回复!如果没有其他选择,我肯定会选择将记录存储在SQLite数据库中。我只是想知道是否有一种通过指针或类似方式迭代访问字符串数组资源的方法,而不必将整个字符串数组加载到String[]中。 - Mashsensor
你可以使用 Resource.openRawResource,但据我所知,该格式未经过文档记录,因此不应尝试解析它。实际上,拥有单独的字符串可能是更好的选择。或者,只需创建自己的(二进制?)资源格式并将其存储为原始资源。 - EboMike
我肯定会试一试SQLite。如果你想对药品进行排序、搜索等操作,它会为你提供很多有用的功能。 - Snailer

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接