如何在Android中正确提取字符串

时间:2015-08-01 16:42:50

标签: java android xml string

通过添加和删除我的应用程序的某些部分,我能够确定以下为字符串代码创建java字段的行导致我的应用程序崩溃(从白色屏幕开始,然后变黑并说该应用程序是没有回应);

private final String HIGH_SCORE = getString(R.string.highscore_code);
private final String CURRENT_SCORE = getString(R.string.currentscore_code);

这是我的strings.xml文件,我希望使用我在线进行的研究中的代码来获取这些字符串的来源;

<resources>
    <string name="app_name">My App</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_my_menu">MyMenu</string>

    <string name="highscore_code">HIGH_SCORE</string>
    <string name="currentscore_code">LAST_SCORE</string>
</resources>

如果有人知道如何正确加载字符串,我将非常感激。

3 个答案:

答案 0 :(得分:1)

试试这个,

Resources res=c.getResources();
String name=res.getString(R.string.name);

其中c是Context对象。

答案 1 :(得分:1)

您将字段HIGH_SCORECURRENT_SCORE定义为类字段。 在此处,如果没有有效的getString() Context,则无法访问方法Reference,因为该方法是在Context类中定义的。 因此,您需要在onCreate()回拨Activity之后再拨打电话。

答案 2 :(得分:1)

getString(...)需要一个正确初始化的android组件(Fragment,Activity,Service,....)。那就是它必须处于正确的生命周期状态。

对于onCreate之前或之后以及onDestroy之前或之后的活动。对于onAttachonDetach的片段,依此类推。你可能应该谷歌活动生命周期片段生命周期

所以你不能使用getString()来初始化类常量。

您可以通过覆盖活动中的onCreate来设置变量。

private String highScore;
private String currentScore;

@override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(<your_layout>);

    highScore = getString(R.string.highscore_code);
    currentScore = getString(R.string.currentscore_code);
}