安装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
}
}
如果我正确理解localization
,我必须首先获取getResources(),以便app知道要显示的字符串的语言。但getResources()正在搞砸我。
我需要做些什么才能正确显示字符串?
答案 0 :(得分:2)
要回答您的问题,您忘了初始化Context object
。所以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)
答案 1 :(得分:0)
您有此代码
Context c;
public void onCreate(Bundle savedInstanceState) {
...
loading.setText(c.getResources().setString(R.string.loading)); //This way gives NPE
成员c
在使用之前永远不会被设置。这就是NullPointerException
的原因。您必须先使用View.getContext()
初始化c
。
Localization会根据设备的功能和设置自动处理。
在您的布局定义中,您可以使用对字符串ID的引用来定义text string,Android会自动加载相应的资源
在res/layout/splashscreen.xml
:
...
<TextView android:id="@+id/loading"
android:text="@string/loading"
.../>
...
因此无需在代码中明确设置文本字符串,因为Android已经这样做了。您唯一需要做的就是在res/values*/strings.xml
文件中定义相应的文本字符串。