无法从R.string获取字符串资源。*

时间:2013-08-29 06:01:29

标签: android android-resources

我有一个包含两列_idname的SQlite表。出于国际化目的,我将名称存储为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. “string”而不是defType中的“strings”。
  2. getResources的不同变体,如Resources.getSystem()...
  3. getPackageName()的不同变体
  4. 我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为它应该是string而不是strings

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

同时检查column中的strings.xml的值是否指定了R.string.today中的标识符。

This就是一个很好的例子。

p.s。:而不是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()));

{{1}}

只有第一和第三项工作。

答案 1 :(得分:0)

试试这个

String str = context.getString(R.string.resId);