Не могу получить ссылку из строкового ресурса для массива в коде Java

Рейтинг: 0Ответов: 2Опубликовано: 25.05.2023

В массив обьектов в коде пытаюсь вставить ссылку из строкового ресурса

 public static final Regiments[] regiments = {
        new Regiments(context.getResources().getString(R.string.name_regiment_0), "bla-bla-bla", R.drawable.logo_leg),
        new Regiments(context.getResources().getString(R.string.name_regiment_1), "bla-bla-bla", R.drawable.logo_leg),
};

но появляется предупреждение о возможном возникновении NullPointerException и приложение падает. Пробовал сохранять в переменную и проверять ее на null , тогда код запускается, но появляется предупреждение что переменная все равно null и поле не заполняется.

Ответы

▲ 0Принят

Решение подсказали, все работает, сделал также как и с картинками ,использовал ссылки на строковый ресурс...

 static final Regiments[] regiments = {
        new Regiments(R.string.name_regiment_0, R.string.name_description_0, R.drawable.logo_leg),
        new Regiments(R.string.name_regiment_1, R.string.name_description_1, R.drawable.logo_leg),
};

...а обрабатывал уже виджете.

 TextView name = findViewById(R.id.regiment_title);
    name.setText(regimentNew.getNameID());
▲ 0

Для того, чтобы избежать возможного NullPointerException, вам нужно вызывать метод getResources() из контекста, который уже инициализирован. Если вы вызываете его из context внутри класса, который еще не создан, то это может вызвать ошибку. Рекомендуется передавать context в качестве параметра в конструктор класса и сохранять его в переменной класса для дальнейшего использования.

public class MyClass {
    private Context context;

    public MyClass(Context context) {
        this.context = context;
    }

    public void someMethod() {
        Regiments[] regiments = {
            new Regiments(context.getResources().getString(R.string.name_regiment_0), "bla-bla-bla", R.drawable.logo_leg),
            new Regiments(context.getResources().getString(R.string.name_regiment_1), "bla-bla-bla", R.drawable.logo_leg),
        };
    }
}

Также убедитесь, что вы правильно определили строковые ресурсы в файле strings.xml.