代码太大和常量错误太多 (Android Studio)
code too large and too many constants errors (Android Studio)
我遇到了无法解决的问题;在网上搜索了一下,没有找到准确的解决办法,或者至少我不是很了解,不知道。
无论如何,我有 Android Studio v. 2.1,这就是我想要做的事情:
起初我创建了一个覆盖 onCreate
方法的 SQLite 数据库,然后,在同一方法的另一个覆盖中,我编写了一个检查数据库是否为空的方法;如果为真,它将增加大约 300000 个单词。
这是这部分:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Database db = new Database(getApplicationContext());
db.open();
if (db.queryTutteParole().getCount() == 0) {
db.inserisciParole("pane", "no");
db.inserisciParole("latte", "no");
db.inserisciParole("uovo", "no");
db.inserisciParole("farina", "no");
db.inserisciParole("sale", "no");
//and all the remaining words
}
db.close();
}
澄清一下:queryTutteParole()
是一种方法,returns 数据库中所有内容的游标,inserisciParole()
将单词及其值放入数据库中。
好吧,代码没有错误(我只测试了 5 个单词),但是如果我把所有 300000 多个单词都放在我的设备上并尝试 运行 它,我会遇到这些错误:
Here's the image with the errors
我该怎么办?
谢谢:)
请参阅 Java "too many constants" JVM error 了解错误原因。
我建议尝试按照@babadaba 的建议将单词添加到数组中,或者将它们放入地图中,然后遍历它们。
另一个解决方案是从文件中读取它们。
哇,你达到了最大常量。常量被分配了一个数字。您已经看到它 R.id.xxxxxx 在您的情况下,它 运行 超出了最大值。将单词存储在文本文件资源中。读取文本文件并插入数据库。您还必须搜索其他 hack,才能使用该应用程序预加载 sqlite 数据库。资源文本文件更容易维护添加新词等。
在您的 res/values 文件夹中创建一个 array.xml 文件并将您的内容放入其中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="yourArray">
<item>pane,no</item>
<item>latte,no</item>
<item>uovo,no</item>
</string-array>
</resources>
然后像这样遍历它:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] yourArray = getResources().getStringArray(R.array.yourArray);
if (db.queryTutteParole().getCount() == 0) {
for (String s : yourArray) {
String[] splittedArray = s.split(",");
db.inserisciParole(splittedArray[0], splittedArray[1]);
}
}
db.close();
}
我遇到了无法解决的问题;在网上搜索了一下,没有找到准确的解决办法,或者至少我不是很了解,不知道。
无论如何,我有 Android Studio v. 2.1,这就是我想要做的事情:
起初我创建了一个覆盖 onCreate
方法的 SQLite 数据库,然后,在同一方法的另一个覆盖中,我编写了一个检查数据库是否为空的方法;如果为真,它将增加大约 300000 个单词。
这是这部分:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Database db = new Database(getApplicationContext());
db.open();
if (db.queryTutteParole().getCount() == 0) {
db.inserisciParole("pane", "no");
db.inserisciParole("latte", "no");
db.inserisciParole("uovo", "no");
db.inserisciParole("farina", "no");
db.inserisciParole("sale", "no");
//and all the remaining words
}
db.close();
}
澄清一下:queryTutteParole()
是一种方法,returns 数据库中所有内容的游标,inserisciParole()
将单词及其值放入数据库中。
好吧,代码没有错误(我只测试了 5 个单词),但是如果我把所有 300000 多个单词都放在我的设备上并尝试 运行 它,我会遇到这些错误:
Here's the image with the errors
我该怎么办?
谢谢:)
请参阅 Java "too many constants" JVM error 了解错误原因。
我建议尝试按照@babadaba 的建议将单词添加到数组中,或者将它们放入地图中,然后遍历它们。
另一个解决方案是从文件中读取它们。
哇,你达到了最大常量。常量被分配了一个数字。您已经看到它 R.id.xxxxxx 在您的情况下,它 运行 超出了最大值。将单词存储在文本文件资源中。读取文本文件并插入数据库。您还必须搜索其他 hack,才能使用该应用程序预加载 sqlite 数据库。资源文本文件更容易维护添加新词等。
在您的 res/values 文件夹中创建一个 array.xml 文件并将您的内容放入其中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="yourArray">
<item>pane,no</item>
<item>latte,no</item>
<item>uovo,no</item>
</string-array>
</resources>
然后像这样遍历它:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] yourArray = getResources().getStringArray(R.array.yourArray);
if (db.queryTutteParole().getCount() == 0) {
for (String s : yourArray) {
String[] splittedArray = s.split(",");
db.inserisciParole(splittedArray[0], splittedArray[1]);
}
}
db.close();
}