Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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字符串资源_Java_Android_Sqlite - Fatal编程技术网

Java Android字符串资源

Java Android字符串资源,java,android,sqlite,Java,Android,Sqlite,我的应用程序需要大约50000个不同的字符串。我可以将它们存储在数据库中,但我想知道是否可以将它们存储为字符串资源 在string.xml文件中存储大量字符串是一种好方法吗 我们可以在string.xml文件中存储多少字符串 按名称搜索字符串的成本? 像 代码段: private String getStringResourceByName(String aString) { String packageName = getPackageName(); int resId =

我的应用程序需要大约50000个不同的字符串。我可以将它们存储在数据库中,但我想知道是否可以将它们存储为字符串资源

  • string.xml
    文件中存储大量字符串是一种好方法吗

  • 我们可以在
    string.xml
    文件中存储多少字符串

  • 按名称搜索
    字符串的成本?
    像

代码段:

private String getStringResourceByName(String aString) {
    String packageName = getPackageName();
    int resId = getResources().getIdentifier(aString, "string", packageName);
    return getString(resId);
}

还有其他方法可以使用吗?

这个答案有点难,但让我试试:

我们可以在
string.xml
文件中存储多少字符串

首先,资源id在R类中编译为常量。也就是说,比如说:

类文件结构的16位常量池计数字段(§4.1)将每类或每接口常量池限制为65535个条目。这是对单个类或接口的总体复杂性的内部限制

因此,50k字符串资源似乎是可能的。作为怀疑论者,经过一点实验后,您似乎可以在一段时间内拥有多达33k的字符串资源。超出此限制后,会产生编译时错误“常量过多”

按名称搜索字符串的成本

在链接的项目中,我对
getResources().getIdentifier(…)进行了基本的比较(按名称)和
getResources().getString(id)(按id)

按id获取比按名称获取快13倍

我还将其与SQLite进行了比较<代码>getResources().getIdentifier(..)
比name='string\u x'
SELECT*表格快1.5倍

string.xml
文件中存储大量字符串是一种好方法吗

伊姆霍,不

优点:

  • GetResurceByName它只比SQLite快1.5倍 缺点:

  • 显著增加编译时间
  • 保证在某个时刻您将收到“太多常量”
  • 很难本地化。
    2^16
    限制涉及所有翻译
  • 另一种方法


    这篇文章可以帮助你在应用程序中附带一个预填充的数据库:

    这很合乎逻辑。如果有人能理解,但这只回答了第2点…@单向不完全。请阅读完整的问题为什么不使用SQLite文件中的数据?@单向什么类型的更详细信息?