Android - Как создать пользовательский (другой) спиннер - PullRequest
1 голос
/ 13 октября 2011

Я пытаюсь построить и заполнить счетчик. У меня проблема с заполнением, это выдает ошибку «Код для статического инициализатора превышает ограничение 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"),...

где имена во вторых кавычках - это то, что я могу выбрать из моего счетчика, а имена в первых кавычках - это результаты по моему выбору. Я хотел бы создать такую ​​вещь, как ExpandableList, где я вставляю «Родительскую строку», а затем все элементы для такого рода «Родительской строки». Это пример:

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

Возможно ли это с помощью специального прядильщика? Я надеюсь, вы поняли, что я имел в виду и написал. Спасибо за вашу помощь.

1 Ответ

1 голос
/ 13 октября 2011

Я думаю, что это не сработало, потому что вы использовали более 65535 байт в статическом инициализаторе или, более конкретно, использовали исходный файл Java для ввода ..

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

Введет вас в ограничения в спецификации компилятора / языка - т.е. из спецификации JVM

"Количество кода на ненативный, неабстрактный метод ограничено 65536 байт по размерам индексов в таблице исключений кода атрибут (§4.7.3), в атрибуте LineNumberTable (§4.7.8) и в Атрибут LocalVariableTable (§4.7.9). «

Это, вероятно, будет работать очень хорошо, если вы сохранили данные в базе данных или в файле (который действительно должен быть таким, каким вы это делаете, это действительно неуклюже делать это в исходном файле Java), который вы загружаете - обратите внимание, что вы можете столкнуться с пределом 65536 байт, даже если ваш код занимает меньше, чем столько байтов, потому что именно таким образом он хранит его внутренне, вы сталкиваетесь.

Вы можете убедиться, что это так, если вы измените свой код на:

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

И запустите его с этим (удалив остальное).

...