当字符串资源存在时,android.content.res.Resources $ NotFoundException

时间:2017-12-06 02:25:09

标签: android string resources

我的android项目中的android values / strings.xml文件中有一些字符串。

<resources>
    <string name="level_reached_label">Level Reached: </string>
    <string name="endgame_textP1">You have scored </string>
    <string name="endgame_textP2"> points in </string>
    <string name="endgame_textP3"> seconds </string>
</resources>

我在我的一个java类

中用这一行调用字符串
endLevelLabel.setText(R.string.level_reached_label + level);
endInfoLabel.setText(R.string.endgame_textP1 + score + R.string.endgame_textP2 + gameTime + R.string.endgame_textP3);

第一行运行正常,但第二行显示错误(程序与第二行注释掉):

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.web.mathtaketwo/com.web.mathtaketwo.EndGame}: android.content.res.Resources$NotFoundException: String resource ID #0x7d1500be

我做错了什么阻止了这个字符串的工作?是因为我试图在1行中使用多个字符串并结合变量?为什么其他字符串加载正常?

注意:正在设置的两个对象是TextView&#39; s:

TextView endInfoLabel = (TextView)findViewById(R.id.endInfoLabel);
TextView endLevelLabel = (TextView)findViewById(R.id.endLevelLabel);

1 个答案:

答案 0 :(得分:0)

好的基本上问题是R.string.xxx只返回字符串的ID。

当我尝试将ID(整数)插入到我的字符串中时,这会导致许多问题。

相反我应该做的是使用getString()函数返回指定id的字符串:

getString(R.string.xxxx)

如果我使用getString()更改我的代码:

endLevelLabel.setText(getString(R.string.level_reached_label) + (level));
endInfoLabel.setText(getString(R.string.endgame_textP1) + score + getString(R.string.endgame_textP2) + gameTime + getString(R.string.endgame_textP3));

然后它正常工作。有关详细信息,请参阅我查看的其他主题:

Reading value from string resource

String Resources

Get string from resource