我有一个包含两列_id
和name
的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
中尝试了不同的变体:
我做错了什么?
答案 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);