错误:代码过大

6

我正在制作一个应用,它会在一个数据库中查找(我目前正在建立该数据库)。当我得到Gradle Build消息错误:代码太大时,我已经完成了其中的10/12。

Java文件实际上只是一个“数据库”(其中包含另一个类中使用的数据)。

它的形式如下:

static int[][] mDatabase10 = new int[][]{{1, 0, 0, 0, 11, 22},
        {1, 53, 42, 0, 41, 0},
        {7, 34, 11, 33, 32, 0}};

每个数组中有80个数组(其中12个是这样的):

static int[][][][] dbDatabase = {{mDatabase10, mDatabase10a, mDatabase10b, mDatabase10c,
        mDatabase10d, mDatabase10e, mDatabase10f, mDatabase10g, mDatabase10h, mDatabase10i,
        mDatabase10j, mDatabase10k, mDatabase10l, mDatabase10m, mDatabase10n, mDatabase10o,
        mDatabase10p, mDatabase10q, mDatabase10r, mDatabase10s, mDatabase10t, mDatabase10u,
        mDatabase10v, mDatabase10w, mDatabase10x, mDatabase10y, mDatabase10z, mDatabase11a,
        mDatabase11b, mDatabase11c, mDatabase11d, mDatabase11e, mDatabase11f, mDatabase11g,
        mDatabase11h, mDatabase11i, mDatabase11j, mDatabase11k, mDatabase11l, mDatabase11m,
        mDatabase11n, mDatabase11o, mDatabase11p, mDatabase11q, mDatabase11r, mDatabase11s,
        mDatabase11t, mDatabase11u, mDatabase11v, mDatabase11w, mDatabase11x, mDatabase11y,
        mDatabase11z, mDatabase12a, mDatabase12b, mDatabase12c, mDatabase12d, mDatabase12e,
        mDatabase12f, mDatabase12g, mDatabase12h, mDatabase12i, mDatabase12j, mDatabase12k,
        mDatabase12l, mDatabase12m, mDatabase12n, mDatabase12o, mDatabase12p, mDatabase12q,
        mDatabase12r, mDatabase12s, mDatabase12t, mDatabase12u, mDatabase12v, mDatabase12w,
        mDatabase12x, mDatabase12y, mDatabase12z, mDatabase13a},

        {mDatabase20, mDatabase20a, mDatabase20b, mDatabase20c, mDatabase20d, mDatabase20e,
                mDatabase20f, mDatabase20g, mDatabase20h, mDatabase20i, mDatabase20j,
                mDatabase20k, mDatabase20l, mDatabase20m, mDatabase20n, mDatabase20o,
                mDatabase20p, mDatabase20q, mDatabase20r, mDatabase20s, mDatabase20t,
                mDatabase20u, mDatabase20v, mDatabase20w, mDatabase20x, mDatabase20y,
                mDatabase20z, mDatabase21a, mDatabase21b, mDatabase21c, mDatabase21d,
                mDatabase21e, mDatabase21f, mDatabase21g, mDatabase21h, mDatabase21i,
                mDatabase21j, mDatabase21k, mDatabase21l, mDatabase21m, mDatabase21n,
                mDatabase21o, mDatabase21p, mDatabase21q, mDatabase21r, mDatabase21s,
                mDatabase21t, mDatabase21u, mDatabase21v, mDatabase21w, mDatabase21x,
                mDatabase21y, mDatabase21z, mDatabase22a, mDatabase22b, mDatabase22c,
                mDatabase22d, mDatabase22e, mDatabase22f, mDatabase22g, mDatabase22h,
                mDatabase22i, mDatabase22j, mDatabase22k, mDatabase22l, mDatabase22m,
                mDatabase22n, mDatabase22o, mDatabase22p, mDatabase22q, mDatabase22r,
                mDatabase22s, mDatabase22t, mDatabase22u, mDatabase22v, mDatabase22w,
                mDatabase22x, mDatabase22y, mDatabase22z, mDatabase23a},

        //so on until mDatabase123a...

最后,有一个函数可以将请求的数组返回到另一个类。
public static int[][] Chordlookup(int chordpart1, int chordpart2){

    return dbDatabase[chordpart1-1][chordpart2-1];
}

根据我在互联网上对这个问题的理解,它与database.java类太大有关。我该如何解决这个问题?

由于我对Java不是很熟悉,因此我可以接受建议。

编辑:

一些代码描述:

每个mDatabase都是一个和弦(例如Cm7) 每组6个整数是播放该和弦的位置: {1, 0, 0, 0, 11, 22} 某些和弦可能有其中之一,某些和弦可能有多个。

然后,在dbDatabase中,每个块(从mDatabaseX0到mDatabaseX3a)都是一个根(例如A、B、C、D、E、F、G)。


3
我不知道你在尝试做什么,但这段代码看起来不是正确的方法。你能告诉我们你想要达到什么目的吗? - 2Dee
是的,抱歉。我会更新问题。 - Marshall
1
请参考Peter Lawrey的回答。与其将整个数据库写在一个类文件中,不如将其写在文本文件中,以便在您的DB中执行INSERT语句(每个Android应用程序都可以拥有自己的DB)。您可以查看此链接:http://www.vogella.com/tutorials/AndroidSQLite/article.html。 - 2Dee
我会调查一下。谢谢。 - Marshall
1个回答

4

代码大小限制为64K字节,当你初始化一个数组时,需要在代码中进行。

最好的选择是将数据存储在文件中,然后读取所需的数据。注意:该文件可以与应用程序一起部署,并直接从归档中获取。

另一个选项是使用字符串(多个字符串长度不受限制),并进行解析。

编辑:

我建议你以人类可读的形式编写数据,例如

Cm7 Bm6 Am7 ....
Dm8 Cm7 Dm8 ....
....

我应该使用什么类型的文件来处理这个?有没有相关资料可以供参考? - Marshall
1
@Marshall 我会使用文本文件,因为它更容易阅读和维护。你可以尝试使用Scanner来读取数据,这是一种简单的方法。 - Peter Lawrey
谢谢。我会试一下。 - Marshall

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