通过添加和删除我的应用程序的某些部分,我能够确定以下为字符串代码创建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>
如果有人知道如何正确加载字符串,我将非常感激。
答案 0 :(得分:1)
试试这个,
Resources res=c.getResources();
String name=res.getString(R.string.name);
其中c是Context对象。
答案 1 :(得分:1)
您将字段HIGH_SCORE
和CURRENT_SCORE
定义为类字段。
在此处,如果没有有效的getString()
Context
,则无法访问方法Reference
,因为该方法是在Context
类中定义的。
因此,您需要在onCreate()
回拨Activity
之后再拨打电话。
答案 2 :(得分:1)
getString(...)
需要一个正确初始化的android组件(Fragment,Activity,Service,....)。那就是它必须处于正确的生命周期状态。
对于onCreate
之前或之后以及onDestroy
之前或之后的活动。对于onAttach
和onDetach
的片段,依此类推。你可能应该谷歌活动生命周期或片段生命周期。
所以你不能使用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);
}