将Eclipse安装在我工作的电脑没有因工作相关的问题,因此所有代码的互联网连接和logcat的文本已经手打字,而不是复制并粘贴,因为我对Eclipse的安装,现在一个单独的笔记本电脑。 所以我承担任何错别字。
现在的问题。 在我的应用程序的新版本,我使其西班牙语支持。 我本地化我所有的字符串strings.xml
。 下面是我不usuing执行我的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()首先让应用程序知道该字符串显示的是什么语言。 但getResources()是什么是搞乱了我。
我需要什么做的就是正确显示的字符串?
要回答你的问题,你忘了初始化Context object
。 所以c
为null。 替换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)
你有这样的代码
Context c;
public void onCreate(Bundle savedInstanceState) {
...
loading.setText(c.getResources().setString(R.string.loading)); //This way gives NPE
成员c
在使用之前是从来没有设置。 这是原因NullPointerException
。 你必须首先初始化c
与View.getContext()
的例子。
本地化是根据设备的功能和设置自动处理。
在您的布局定义,您可以定义文本字符串与一个字符串ID的引用和Android会自动加载相应的资源
在res/layout/splashscreen.xml
:
...
<TextView android:id="@+id/loading"
android:text="@string/loading"
.../>
...
因此,有没有必要明确设置在代码中的文本字符串,因为Android将已经这样做了。 你必须做的唯一的事情,就是在定义适当的文本字符串res/values*/strings.xml
的文件。