由于工作相关问题,我安装 Eclipse 的工作计算机没有互联网连接,因此所有代码和 LogCat 文本都是手动输入的,而不是复制和粘贴的,因为我现在在一台单独的笔记本电脑上安装了 Eclipse。因此,请耐心等待我的任何拼写错误。
现在来说说这个问题。在我的应用程序的新版本中,我将其支持西类牙语。我在 strings.xml
中本地化了所有字符串。下面是我不用来实现的 Java 代码。
public class SplashScreen extends SwarmActivity {
Context c;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen);
loading = (TextView)findViewById(R.id.loading);
//loading.setText(c.getResources().setString(R.string.loading)); //This way gives NPE
//loading.setText(R.string.loading); //This way works
//loading.setText("Test"); //This way works
}
}
如果我正确理解本地化
,我必须首先使用 getResources() ,以便应用程序知道要显示的字符串的语言。但 getResources() 才是让我困惑的地方。
我需要做什么才能正确显示字符串?
最佳答案
为了回答您的问题,您忘记初始化Context对象
。所以c
为空。代替
loading.setText(c.getResources().setString(R.string.loading));
通过
loading.setText(getResources().setString(R.string.loading));
但实际上没有必要这样做。
Android 在运行时根据设备的区域设置加载适当的资源。
您只需尊重项目中的这种层次结构即可:
res/
values/
strings.xml
values-es / (here for spanish values)
strings.xml
values-fr /
strings.xml (here for french values)
关于java - 在 strings.xml 中本地化字符串会产生 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16362524/