在strings.xml中本地化字符串给出的NullPointerException(Localiz

2019-10-29 20:01发布

将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()是什么是搞乱了我。

我需要什么做的就是正确显示的字符串?

Answer 1:

要回答你的问题,你忘了初始化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)


Answer 2:

你有这样的代码

Context c;

public void onCreate(Bundle savedInstanceState) {
    ...
    loading.setText(c.getResources().setString(R.string.loading));  //This way gives NPE

成员c在使用之前是从来没有设置。 这是原因NullPointerException 。 你必须首先初始化cView.getContext()的例子。

本地化是根据设备的功能和设置自动处理。

在您的布局定义,您可以定义文本字符串与一个字符串ID的引用和Android会自动加载相应的资源

res/layout/splashscreen.xml

...
<TextView android:id="@+id/loading"
    android:text="@string/loading"
    .../>
...

因此,有没有必要明确设置在代码中的文本字符串,因为Android将已经这样做了。 你必须做的唯一的事情,就是在定义适当的文本字符串res/values*/strings.xml的文件。



文章来源: Localizing strings in strings.xml gives NullPointerException