1

スピナーを作成して設定しようとしています。設定に問題があり、「静的初期化子のコードが 65535 バイトの制限を超えています」というエラーが表示されます。スピナーの中に入れたすべてのアイテムが必要です。私のスピナーはこのように設定されています:

public class Names
{
    public static final String ALL_NAMES = "All names";
    public static final String NAMES = "NAMES";
    public static final String OBJECT = "OBJECT";
    private String names;
    private String object;

    public Names(String names, String object){
        super();
        this.names = names;
        this.object = object;
    }

    public String getNames() { return names; }
    public String getObject() { return object; }

    public static final Names[] DB = new Names[]{ 
        new Names("Albert","Person"),
        new Names("Bobby","Animal"),...

ここで、2 番目の引用符で囲まれた名前は、スピナーから選択できるものであり、最初の引用符で囲まれた名前は、選択した結果です。「親文字列」を挿入してから、その種類の「親文字列」のすべての項目を挿入する ExpandableList のようなものを作成したいと思います。これは例です:

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
    private String[] groups = { "Persons", "Dogs", "Cats" };
    private String[][] children = {
        { "Albert", "Robert", "Paul" },
        { "Yuri", "Rocky" },
        { "Lisa" },
    };

カスタムスピナーを使用してそれは可能ですか?私が何を意味し、書いたかを理解していただければ幸いです。ご協力ありがとうございました。

4

1 に答える 1

1

静的初期化子で 65535 バイトを超えて使用したか、より具体的には Java ソース ファイルを使用して ..

 public static final Names[] DB = new Names[]{ 
    new Names("Albert","Person"),
    new Names("Bobby","Animal"),...

コンパイラ/言語仕様内の制限に遭遇します-つまり、JVM仕様から

「非ネイティブで非抽象メソッドごとのコード量は、Code 属性の exception_table (§4.7.3)、LineNumberTable 属性 (§4.7.8) のインデックスのサイズによって 65536 バイトに制限されています。および LocalVariableTable 属性 (§4.7.9) で。」

ロードするデータベースまたはファイルにデータを保存した場合、これはおそらく完全にうまく機能します(これは実際にこれを行う方法である必要があります。Javaソースファイルで行うのは本当に不格好です)。コードがそのバイト数よりも少ない場合でも、65536バイトの制限に達する可能性があります。これは、コードを内部に保存する方法であるためです。

コードを次のように変更すると、これが当てはまることを確認できます。

 public static final Names[] DB = new Names[]{ 
    new Names("Albert","Person"),
    new Names("Bobby","Animal")};

そして、それを実行します(残りを削除しました)。

于 2011-10-13T15:00:29.447 に答える