【问题标题】:code too large and too many constants errors (Android Studio)代码太大和太多常量错误(Android Studio)
【发布时间】:2016-07-01 11:32:34
【问题描述】:

我有一个无法解决的问题;网上搜了下,没找到准确​​的解决办法,或者至少不是很了解,不知道。

无论如何,我有 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() 是一种返回数据库中所有内容的游标的方法,inserisciParole() 将单词及其值放入数据库中。

好吧,代码没有错误(我只测试了 5 个单词),但是如果我把 300000 多个单词全部放入并尝试在我的设备上运行它,我会遇到以下错误:

Here's the image with the errors

我该怎么办?

谢谢:)

【问题讨论】:

  • 逐渐增加字数,看看错误从哪里开始。
  • 请在帖子中添加SQL标签。
  • 我会尝试将这些单词添加到字符串数组并遍历它。
  • 类中常量、字段、方法和其他东西的最大数量约为 65k (2^16)
  • @babadaba 我已经尝试过了,但它给出了同样的错误(事实上,首先我已经这样做了,而不是我尝试使用 db)

标签: java android android-studio javac


【解决方案1】:

在您的 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
  • 很高兴为您提供帮助 :) 如果您对此有任何进一步的问题,请发表评论
【解决方案2】:

请参阅 Java "too many constants" JVM error 了解您收到错误的原因。

我建议尝试按照@babadaba 的建议将单词添加到数组中,或者将它们放在地图中,然后遍历它们。

另一种解决方案是从文件中读取它们。

【讨论】:

  • 它不适用于数组,它是一样的。是的,我会使用文本文件,但我会按照@danny117 所说的那样做,因为这样更适合表演
  • 那么你必须从一个文件中读取。我不能 100% 确定,但 .properties 文件可能对您来说很方便。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2021-03-10
    • 2020-10-03
    相关资源
    最近更新 更多