问题描述
我有一个consts类:
public class AppConstants {
public static final class Projects {
public static final String JOB = Resources.getSystem().getString(R.string.job);
// more...
}
}
我想在运行时使用此const:
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
。但是我怎么能访问这些字段呢?
解决方法
getSystem()
的JavaDoc说:
返回一个全局共享资源对象,该对象仅提供对系统资源(无应用程序资源)的访问,未为当前屏幕进行配置(无法使用尺寸单位,不会根据方向发生变化等),并且不受影响通过运行时资源覆盖。
R.string.job是系统资源还是应用程序资源?
JavaDoc还说:
通常,您可以使用Context#getResources()获取与您的应用程序关联的Resources实例。
R.string.job
不是系统资源,因此您需要通过Context
访问它。然后,您可以致电context.getResources().getString(x)
或直接致电context.getString(x)
。
那你为什么不只使用它呢? (假设您已经处于活动或应用程序之类的上下文中)
if (getString(R.string.job).equals(curr)) {
// do stuff
}