Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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 Studio)_Java_Android_Android Studio_Javac - Fatal编程技术网

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

Java 代码太大和常量太多错误(Android Studio),java,android,android-studio,javac,Java,Android,Android Studio,Javac,我有一个我无法解决的问题;我在网上搜索过,但并没有找到一个精确的答案,或者至少我不太明白,我不知道 不管怎样,我有Android Studio v。2.1,下面是我要做的: 首先,我创建了一个SQLite数据库,覆盖了onCreate方法,然后,在同一方法的另一个覆盖中,我编写了一个方法来检查数据库是否为空;如果是真的,它将增加大约300000个单词。 以下是这一部分: @Override public void onCreate(Bundle savedInstanceState) {

我有一个我无法解决的问题;我在网上搜索过,但并没有找到一个精确的答案,或者至少我不太明白,我不知道

不管怎样,我有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();
}
澄清一下:
queryutteparole()
是一种返回数据库中所有内容的游标的方法,
inserisciParole()
将单词及其值放入数据库中

嗯,代码没有错误(我测试时只输入了5个单词),但是如果我输入了所有300000多个单词,并尝试在我的设备上运行,我会出现以下错误:

我该怎么办

谢谢:)

有关错误原因的解释,请参阅

我建议尝试按照@babadaba的建议将单词添加到数组中,或者将它们放在地图中,并对它们进行迭代


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

哇,你已经达到了最大常数。这些常数被分配了一个数字。您已经看到了R.id.xxxxxx,在您的案例中,它超出了最大值。将单词存储在文本文件资源中。读取文本文件并插入数据库。还有其他一些黑客,你必须搜索它们才能在应用程序中预加载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();
}

逐渐增加字数以查看错误的起始位置。请将SQL标记添加到帖子中。我会尝试将这些字数添加到字符串数组中并对其进行迭代。类中常量、字段、方法和其他内容的最大数量约为65k(2^16)@babadaba我已经尝试过了,但它给出了相同的错误(事实上,首先我是这样做的,然后我尝试使用db)它不适用于数组,它是一样的。是的,我会使用文本文件,但我会按照@danny117所说的那样做,因为这样做的性能更好,然后你必须从文件中读取。我不是100%确定,但是.properties文件可能会方便你使用。哦,我直接在Java文件中创建了数组,所以这里是为什么它给出了ame错误,非常感谢,这肯定会运行:Dglad to help:)如果您对此有任何进一步的问题,请发表评论