将 strings.xml 资源值分配给 MainActivity 中的字符串失败

Posted

技术标签:

【中文标题】将 strings.xml 资源值分配给 MainActivity 中的字符串失败【英文标题】:Assigning strings.xml resource values to string in MainActivity fails 【发布时间】:2018-04-20 09:55:22 【问题描述】:

我正在尝试本地化我的应用程序。因此,我将所有字符串都移到了 strings.xml 中。然后,我将代码中的所有硬编码文本替换为字符串变量。但是,每当我尝试将资源值分配给我的字符串变量时,都会出现运行时错误。

我的代码如下所示:

public class MainActivity extends AppCompatActivity 
    private final String MSG_STATUS =
    this.getResources().getString(R.string.status);
...

strings.xml 看起来像这样:

<resources>
    <string name="status">My Status</string>
</resources>

这会导致以下错误:

java.lang.RuntimeException:无法实例化活动 组件信息com.xxx/com.xxx.MainActivity: java.lang.NullPointerException:尝试调用虚拟方法 'android.content.res.Resources android.content.Context.getResources()' 在空对象引用上

到目前为止,我发现的所有示例都采用了非常相似的方法。因此,我很困惑为什么它不起作用。我想这可能与上下文有关。

【问题讨论】:

在调用 super() 之后在 oncreate 方法中添加那行代码。 任何需要Context 的东西都必须在方法内实例化。 GetString 是 Activity 的一个方法。您可以省略“this.getResources”资格。 @Kuffs 不,不是。 是的:developer.android.com/reference/android/content/… 【参考方案1】:

因为在调用super之后,在onCreate中初始化Activity之前,您无法访问资源。在此之前,它没有正确设置。 this 指针在构造函数被调用之前也不会起作用,并且不能用于静态初始化变量。

基本上,将所有代码移到onCreate。

【讨论】:

以上是关于将 strings.xml 资源值分配给 MainActivity 中的字符串失败的主要内容,如果未能解决你的问题,请参考以下文章

用于更新分配给资源的标签的 Azure API

未分配给列表视图项的字符串

Android - 我啥时候应该在 Strings.xml 资源文件中转义 unicode?

是否可以使用 SQLite 来存储翻译而不是像 strings.xml 这样的 XML 资源

如何将函数中使用的数组传递给动态分配的main数组?

将 Strings.xml 中的 String-Array 更改为 ArrayList