Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android开发字符串数组资源太大,导致Android应用程序崩溃!_Java_Android_Arrays - Fatal编程技术网

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

Java Android开发字符串数组资源太大,导致Android应用程序崩溃!,java,android,arrays,Java,Android,Arrays,我有一个字符串数组资源,它有大约1000个药物名称 <string-array name="index"> <item>Aspirin</item> <item>Levitra</item> .... </string-array> 我的字符串数组似乎有太多的记录,这会导致我的应用程序崩溃(堆栈溢出?)当我将字符串数组资源减少到大约506条记录时,应用程序会再次工作,但在字符串数组中再添加一个元素会使应用程序崩溃

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

<string-array name="index">
<item>Aspirin</item>
  <item>Levitra</item>
  ....
</string-array>
我的字符串数组似乎有太多的记录,这会导致我的应用程序崩溃(堆栈溢出?)当我将字符串数组资源减少到大约506条记录时,应用程序会再次工作,但在字符串数组中再添加一个元素会使应用程序崩溃

我该怎么办?我想编写逻辑代码来过滤列表,并对列表执行其他操作。我在应用程序中没有SQL数据库,因此无法在数据库中进行处理。有没有一种方法可以在不将字符串数组资源加载到字符串[]中的情况下对其进行迭代?我注意到资源是一个指针。或者是否有一种可行的替代数据结构或方法


谢谢,

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


我能想到的唯一替代方法是使用单个字符串和字符串ID值数组,这应该可以工作。

您可以使用SAX解析器来防止应用程序崩溃,如本文所述
但是,如果你有这么大的数据集,你应该考虑实现一个数据库

谢谢你的响应!如果没有其他选择,我当然会选择将记录存储在SQLite数据库中。我只是想知道是否有一种方法可以通过指针或类似的方式迭代字符串数组资源,而不必将整个字符串数组加载到字符串[]。您可以使用
resource.openRawResource
,但FWIK没有记录格式,因此,您不应该尝试解析它。实际上,拥有单独的字符串可能是更好的选择。或者只是创建自己的(二进制?)资源格式并将其存储为原始资源。。如果您想对药物进行排序、搜索药物等,它将为您提供许多有用的功能。“我有一个字符串数组资源,它有大约1000个药物名称”——为什么?普通XML资源无法满足的字符串数组有什么价值?@commonware谢谢,干杯!我使用字符串数组资源是因为它是Google自己的教程将记录列表加载到ListView中的首选方法。当我把所有的记录按起始字母表分类时,一切都非常棒。现在我正在尝试实现一个搜索函数,因此我理想情况下希望一次遍历所有记录,而不是对每个起始字母表进行循环。我不熟悉Android中的内存分配架构,但我有点惊讶,将506条记录加载到字符串[]中会使应用程序崩溃:如果有一种方法可以在R.arrays中迭代字符串数组资源,而不首先将其按值加载到数据结构中,pIt将非常棒…:D、 或者向量或链表可以保存更多的数据?也许我只需要创建一个SQLite数据库并在那里处理它,或者在搜索方法中迭代所有26个字母。感恩节快乐
Resources res = getResources();
String[] drugs = res.getStringArray(R.array.index);