奇怪的异常:android.content.res.Resources $ NotFoundException

时间:2014-02-28 09:53:02

标签: java android android-maven-plugin

我在运行仪器测试时遇到了这个异常:

INSTRUMENTATION_RESULT: shortMsg=android.content.res.Resources$NotFoundException
INSTRUMENTATION_RESULT: longMsg=android.content.res.Resources$NotFoundException: String resource ID #0x7f020001

我确定资源存在!

我的项目结构:用户项目 A ,以及lib项目 B (apklib)。

在项目B中,我定义了资源文件B-project/res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">my app</string>
    <string name="branding">release</string>
</resources>

项目A取决于项目B,在项目A中,我重写了在B中定义的一些属性(在A-project/res/values/strings.xml中):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">For demo</string>
</resources>

打包项目A时,事情变得更加陌生:

在项目A生成的资源中,我找到了R.java:

public final class R {
    public static final class attr {
    }
    public static final class string {
        public static int app_name=0x7f020000;
        public static int branding=0x7f020001;
    }
}

我还在R.txt目录中找到target(我正在使用maven来管理项目):

int drawable icon 0x7f020000
int string app_name 0x7f030000
int string branding 0x7f030001

错误:

R.branding 0x7f020001 ,但真正的资源ID是: 0x7f030001

我认为这就是为什么我得到了Resources$NotFoundException,但是我试图清理并重新编译项目很多次,仍然遇到了同样的问题。

1 个答案:

答案 0 :(得分:0)

请仔细按照步骤进行操作

1)清理所有项目

2)为您的特定项目导入特定的R.java。

3)只导入你需要的特定类,不要像这样导入(它会抛出错误的东西),你引用了多个R.java文件

   import org.project.a.R;
   import org.project.b.R;

如果您在项目A中,则导入org.project.a.R;只是没有导入org.project.b.R;

假设您在A中使用项目b中的类,那么您必须具体   import org.project.b.ClassName;