android.content.res.Resources $ NotFoundException。模块,aar库

时间:2016-08-18 10:17:15

标签: android

我有带有字符串资源的库模块。 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。

2 个答案:

答案 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'