【问题标题】:java.lang.ExceptionInInitializerError Caused by: android.content.res.Resources$NotFoundException: String resourcejava.lang.ExceptionInInitializerError 引起:android.content.res.Resources$NotFoundException:字符串资源
【发布时间】:2020-08-11 16:55:39
【问题描述】:

我有一个 consts 类:

public class AppConstants {
    public static final class Projects {
        public static final String JOB = Resources.getSystem().getString(R.string.job);
        // more...
    }
}

我想在运行时使用这个常量:

if (AppConstants.Projects.JOB.equals(curr)) {
   // do stuff
}

但我得到以下异常:

/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.ExceptionInInitializerError
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f1101cc

我应该如何解决它?我认为这是因为我使用了关键字static。但是我如何才能访问这些字段呢?

【问题讨论】:

    标签: java android


    【解决方案1】:

    getSystem() 的 JavaDoc 说:

    返回一个全局共享资源对象,该对象仅提供对系统资源(无应用程序资源)的访问,未针对当前屏幕进行配置(不能使用维度单位,不根据方向更改等),并且不受影响通过运行时资源覆盖。

    R.string.job 是系统资源还是应用程序资源

    JavaDoc 还说:

    您通常可以通过Context#getResources() 获取与您的应用程序关联的资源实例。


    R.string.job不是系统资源,需要通过Context访问。您可以致电context.getResources().getString(x) 或直接致电context.getString(x)

    那么你为什么不直接使用它呢? (假设您已经在某个上下文中,例如 Activity 或 Application)

    if (getString(R.string.job).equals(curr)) {
       // do stuff
    }
    

    【讨论】:

    • 这对您有帮助吗?如果是,你可以接受我的回答
    猜你喜欢
    • 2013-06-27
    • 2021-05-09
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多