Не удается получить строковый ресурс из R.string.*

У меня есть таблица SQlite с двумя столбцами _id и name. В целях интернационализации я храню имя как R.string.today Теперь я хочу получить строковый ресурс, связанный с R.string.today:

String column = myCursor.getString(myCursor.getColumnIndex(MainDb.NAME));

int resId = getApplicationContext().getResources().getIdentifier(column, "strings", getApplicationContext().getPackageName());

String buttonText;

if (resId != 0)
{
  buttonText = getApplicationContext().getString(resId);
} else
{
  buttonText = "Resource is null!";
} 

resId всегда равно 0. Переменная column имеет правильное значение, я проверил это с помощью отладчика. Я пробовал разные варианты resId:

  1. «строка» вместо «строки» в defType.
  2. Различные варианты getResources, такие как Resources.getSystem()...
  3. Различные варианты getPackageName()

Что я делаю неправильно?


person Sergey Grabak    schedule 29.08.2013    source источник
comment
может быть, я не понимаю вашего фрагмента, но... почему бы вам просто не использовать int resId = getApplicationContext().getResources().getString(R.string.MYSTRING)?   -  person avalancha    schedule 29.08.2013
comment
getResources() требует контекста активности String s = getResources().getString(R.string.today)   -  person Raghunandan    schedule 29.08.2013
comment
Вы пробовали использовать только today вместо R.string.today?   -  person Trinimon    schedule 29.08.2013


Ответы (2)


Я думаю, что это должно быть string вместо strings:

int resId = getApplicationContext().getResources()
           .getIdentifier(column, "string", getApplicationContext().getPackageName());

Проверьте также, указывает ли значение column на идентификатор в вашем strings.xml.

Это хороший пример.

p.s.: вместо R.string.today просто сохраните today или извлеките store из R.string.today.

Resources r = getResources();
r.getIdentifier("today", "string", getPackageName()));
r.getIdentifier("R.string.today", "string", getPackageName())); // doesn't work
r.getIdentifier("R.string.today".replaceAll(".*\\.", ""), "string", getPackageName()));

Работают только первая и третья.

person Trinimon    schedule 29.08.2013
comment
Интересно! вечером попробую - person Sergey Grabak; 29.08.2013
comment
Как использовать кнопку Что-то вроде кнопки = getApplicationContext().getId(resId); - person Deepak Yadav; 20.06.2018

Попробуй это

String str = context.getString(R.string.resId);
person Muhammad Aamir Ali    schedule 29.08.2013
comment
resId означает вашу строку. R.string.yourString - person Muhammad Aamir Ali; 29.08.2013