【问题标题】:Android Development String Array Resource too big, crashing Android App!Android开发字符串数组资源太大,Android App崩溃!
【发布时间】:2011-05-15 10:37:11
【问题描述】:

我有一个包含大约 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 条记录时,应用程序再次工作,但添加了 1 个以上元素在字符串数组中会使应用程序崩溃。

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

谢谢,

【问题讨论】:

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

标签: java android arrays


【解决方案1】:

您可以使用 SAX 解析器来防止您的应用程序崩溃,如此处所述Should I be using something other than getResource().getStringArray() to populate a large array? 但是,如果您有如此庞大的数据集,您应该考虑实现一个数据库

【讨论】:

    【解决方案2】:

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

    我能想到的唯一选择是使用单个字符串并拥有一个字符串 ID 值数组 - 这应该可以。

    【讨论】:

    • 感谢您的回复!如果没有其他选择,我当然会选择将记录存储在 SQLite 数据库中。我只是想知道是否有一种方法可以通过指针或类似的方式遍历字符串数组资源,而不必将整个字符串数组加载到字符串 [] 中。
    • 您可以使用Resource.openRawResource,但 FWIK 格式没有记录,因此,您不应该尝试解析它。确实,拥有单独的字符串可能是更好的选择。或者只是创建您自己的(二进制?)资源格式并将其存储为原始资源。
    • 我一定会试试 SQLite。如果你想对药物进行分类、搜索药物等,它会给你很多有用的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多