我有带有字符串资源的库模块。 string.xml
<string name="lib_ver">1.0</string>
和方法:
public static String getLibVersion(Context context){
return context.getResources().getString(R.string.lib_ver);
}
在我的应用程序应用程序中,我将模块包含在aar库中。
一切都正常,除了一件事。
如果我尝试在活动类中使用lib方法获取lib版本:
getLibVersion(getApplicationContext())
我收到错误:
android.content.res.Resources $ NotFoundException:字符串资源ID #0x7f02105b
但是,如果我在活动课中,没有调用库方法:
getApplicationContext().getResources().getString(R.string.lib_ver)
没有错误。哪里有问题? THX。
答案 0 :(得分:0)
getApplicationContext
:返回当前进程的单个全局Application对象的上下文。这通常只应在需要生命周期与当前上下文分离的上下文时使用,该上下文与进程的生命周期而不是当前组件相关联。来自android
这可能是您ApplicationContext
投掷错误的原因! :)
More info: Context和ApplicationContext都是Context的实例,但应用程序实例与应用程序的生命周期相关联,而Activity实例与Activity的生命周期相关联。因此,他们可以访问有关应用程序环境的不同信息。
如果您阅读getApplicationContext上的文档,它会注意到,如果您需要一个生命周期与当前上下文不同的上下文,那么您应该只使用它。这不适用于您的任何一个示例。
活动上下文可能包含有关完成这些调用所需的当前活动的一些信息。如果您显示确切的错误消息,可能能够指出它究竟需要什么。
但一般来说,除非你有充分理由不使用活动上下文,否则请使用活动上下文。
答案 1 :(得分:0)
只需要将gradle更新为2.1.2
classpath 'com.android.tools.build:gradle:2.1.2'