代码太大和常量过多错误(Android Studio)

4
我有一个无法解决的问题;我在网上搜索过,但没有找到确切的解决方案,或者至少我没有很好地理解,我不知道。 无论如何,我有Android Studio v. 2.1,这是我正在尝试做的事情: 首先,我创建了一个SQLite数据库覆盖onCreate方法,然后在同一方法的另一个覆盖中编写了一个检查数据库是否为空的方法;如果为真,则会添加大约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() 是返回数据库中所有内容的游标方法,inserisciParole() 将单词及其值放入数据库中。

好的,代码没有错误(我只测试了放了 5 个单词的情况),但是如果我放入所有的 300000+ 单词并尝试在我的设备上运行它,就会出现以下错误:

这里是带有错误信息的图片

我该怎么办?

谢谢 :)


逐渐增加单词数量,查看错误出现的位置。 - rossum
请在帖子中添加SQL标签。 - Ali Bdeir
我会尝试将这些单词添加到一个字符串数组中,并遍历它。 - babadaba
1
类中常量、字段、方法和其他内容的最大数量约为65k(2^16)。 - Daniel Vlasenko
@babadaba 我已经尝试过了,但是它仍然给出相同的错误(实际上,我最初是这样做的,然后我尝试使用数据库)。 - DISSENNATORE
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
4
在你的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();
}

哦,我直接在Java文件中创建了数组,所以这就是为什么它会出现相同的错误,非常感谢,这肯定会运行的 :D - DISSENNATORE
1
很高兴能够帮忙:) 如果您对此有任何进一步的问题,请在评论区留言。 - babadaba

3
请查看Java "too many constants" JVM error以了解错误的原因。 我建议尝试像@babadaba建议的那样将这些单词添加到数组中,或者将它们放在一个映射中,并进行迭代。 另一种解决方案是从文件中读取它们。

它不能与数组一起使用,效果相同。是的,我会选择文本文件,但我会按照@danny117所说的方式进行操作,因为这样对性能更好。 - DISSENNATORE
然后你需要从文件中读取。我不是100%确定,但.properties文件可能很方便你使用。 - Rex Wagenius

1

哇,你已经达到了最大常量。这些常量被分配了一个数字。你已经看到了R.id.xxxxxx。在你的情况下,它超过了最大值。将单词存储在文本文件资源中。读取文本文件并插入数据库。还有其他技巧,你需要搜索它们以便在应用程序中预加载sqlite数据库。资源文本文件更容易维护,添加新单词等。


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