我正在尝试从Android Studio上的辅助模块获取一些R.string
资源。我有两个不同的模块。我可以将Applicacion Context传递给我的secundary模块,以便调用getString(R.string....)
方法。
两个字符串文件都有相同的字符串。但它们都不适合我。这就是我在辅助模块中所做的事情:
Resources.getSystem().getString(R.string.infraestructura);
当我使用从主模块收到的上下文时,我的结果相同:
cx.getString(R.string.infraestructura);
当我在那里导入辅助模块R.string
文件时,我得到例外:
java.lang.RuntimeException: Unable to start activity ComponentInfo{es.mycompany.sima/es.mycompany.sima.HomeActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x7f0b0047
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
at android.app.ActivityThread.access$900(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5479)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f0b0047
当我尝试导入主R.string
文件时,我在编译时遇到错误:
Error:(9, 21) error: package es.mycompany.sima does not exist <-- Import line
Error:(32, 125) error: package R does not exist <-- Reference to R
我使用cx.getResources().getString(R.string.infraestructura)
代替cx.getString(R.string.infraestructura)
解决了问题。不过,我不知道为什么。
答案 0 :(得分:0)
您无法直接访问数据。您需要使用Content Provider在应用程序之间共享任何数据。如果您使用第二个模块作为库,请正确检查构建路径,并通过查看导入确保R指向正确的模块。
答案 1 :(得分:0)
Resources.getSystem().getString(R.string.infraestructura);
只适用于系统资源(android.R.string ...)
在辅助模块中,由于周期性依赖(app - &gt; sub module&amp;&amp; sub module - &gt; app),您通常不会调用app模块的字符串资源。
从您的app模块,您应该能够像这样引用子模块字符串资源:
getString(package.ofsubmodule.R.string.string_name);
根据您调用cx.getResources or cx.getString
的位置以及您使用或传递它的方式,它可能会引用应用程序或子模块的资源,您必须显示更多代码才能解决问题。