0

Я взял за основу пример из Android-Universal-Image-Loader, убрал всё лишние, немножко переделал - и теперь просто хочу повторно использовать галерею в проекте.

Галерея берет фотографии из файла Constants.java.

public class Constants{
private static String[] image1= new String[] {
        // Heavy images
        "https://img1.goodfon.ru/original/1440x900/2/96/art-sono-devushki-shkolnicy.jpg",
        "https://img1.goodfon.ru/original/1440x900/2/96/art-sono-devushki-shkolnicy.jpg",
        "https://img1.goodfon.ru/original/1440x900/2/96/art-sono-devushki-shkolnicy.jpg"
    };

private static String[] image2= new String[] {
        // Heavy images
        "https://img1.goodfon.ru/original/1440x900/2/96/art-sono-devushki-shkolnicy.jpg",
        "https://img1.goodfon.ru/original/1440x900/2/96/art-sono-devushki-shkolnicy.jpg",
        "https://img1.goodfon.ru/original/1440x900/2/96/art-sono-devushki-shkolnicy.jpg"
};

public static String[] IMAGES = Metal;

private Constants() {}

public static class Config {
    public static final boolean DEVELOPER_MODE = false;
}

public static class Extra {
    public static final String FRAGMENT_INDEX = "com.nostra13.example.universalimageloader.FRAGMENT_INDEX";
    public static final String IMAGE_POSITION = "com.nostra13.example.universalimageloader.IMAGE_POSITION";
}

}

Изначально public static String[] IMAGES был присвоен массив ссылок.
И потом это всё вызывалось в другой активности, обрабатывалось и выводилось.
Теперь сделал так, как в коде выше, и хочу в зависимости от того, какая галерея запущена, присваивать IMAGES соответствующий массив ссылок.

Например, как-то так:

public static String[] IMAGES;
public static String iden = "iMetal";

switch (iden) {
    case "iMetal":
            IMAGES = Metal;
            break;

... }

Но мне пишет ошибку: unexpected token switch.

Переменную iden планировал передавать из другой активности при запуске галереи.

AvidCoder
  • 2,808
Skivs
  • 113
  • 1
    а зачем вы switch написали вне тела метода? он так не может и это ошибка компиляции. Оберните тогда уж в статический блок: static { switch(iden) {}} если очень хочется – Artem Aug 18 '16 at 09:47
  • 1
    извиняюсь за тупой вопрос, а где в этом коде тело метода? – Skivs Aug 18 '16 at 09:49
  • 1
    вот именно, его здесь нет. нужно объявить метод чтобы он появился. – Artem Aug 18 '16 at 09:50
  • 1
    Нигде, там не объявлено ни одного метода. Попробуйте начать с изучения основ Java. – Nofate Aug 18 '16 at 09:50
  • Все, всем спасибо! Вставил static все заработало! – Skivs Aug 18 '16 at 09:53
  • Еще один вопрос, а могу я в этот код передать переменную через Intent или как то еще? Или нужно все таки объявить метод сразу. – Skivs Aug 18 '16 at 12:34
  • @Skivs новый вопрос вы можете задать с помощью кнопки Задать вопрос. – AvidCoder Jan 07 '24 at 10:34

1 Answers1

1

Ошибка "unexpected token switch" возникает из-за того, что код с оператором switch находится вне метода или блока кода. В Java инструкции, такие как switch, if, else, for и другие, должны находиться в методах, конструкторах или блоках кода, например, в методе main, в методах активности или других пользовательских методах.

В вашем случае, чтобы исправить эту ошибку, поместите код с оператором switch в метод, например, в метод вашей активности или другой пользовательской функции:

public class Constants {
    public static String[] IMAGES;
public static void setImages(String iden) {
    switch (iden) {
        case "iMetal":
            IMAGES = image1; // Предполагается, что у вас есть массив image1, который хотите присвоить
            break;
        // Другие варианты для разных идентификаторов
        default:
            IMAGES = null; // Либо установите другой дефолтный массив
            break;
    }
}

}

После этого вы сможете вызвать метод setImages из вашей активности или другого места в коде, передавая значение iden для установки соответствующего массива в IMAGES. Например:

String iden = "iMetal"; // Получите значение идентификатора откуда-то
Constants.setImages(iden); // Вызов метода для установки соответствующего массива

Это позволит вам установить массив ссылок в IMAGES в зависимости от значения iden, которое вы передадите.


Если же вам нужно только инициализировать переменную в классе без явного вызова метода, можно поместить блок switch в статический блок инициализации класса.
Такой подход позволяет установить значение переменной до любых других операций в классе и обеспечить корректное ее инициализирование при загрузке класса.
Например, вы можете использовать следующий код:

public class Constants {
    public static String[] IMAGES;
static {
    String iden = "iMetal"; // Предположим, что вы получили значение идентификатора
    switch (iden) {
        case "iMetal":
            IMAGES = image1; // Предполагается, что у вас есть массив image1, который хотите присвоить
            break;
        // Другие варианты для разных идентификаторов
        default:
            IMAGES = null; // Либо установите другой дефолтный массив
            break;
    }
}

}

AvidCoder
  • 2,808