文件夹为空时无法解析原始符号

Cannot resolve symbol raw when the folder is empty

当我尝试使用以下代码 Field[]fields=R.raw.class.getFields();

访问文件夹时,为什么它给我 "cannot resolve symbol raw"

当我将任何文件添加到 raw 文件夹时,相同的代码有效。该文件夹位于 "res" 目录中。

注意:我也试过使用完整的包名。

我认为问题是您使用了错误的 R 包。 确保 R 应该来自您的包名称而不是其他一些 android Native class.

当您创建 Android resource folder 例如 layoutdrawablemipmap 等时。android 将创建一个名为 R.java。您可以在

中找到它

app\build\generated\source\r\degug\your\app\package\name\R.java

它基本上是一个普通的 java 文件,由 android 自动生成,用于在我们的代码中通过 id 引用资源。

R.java

public final class R {
    public static final class layout{
        public static final int main_activity=0x7f0a0000;
        public static final int login_activity=0x7f0a0001;
    }
    public static final class drawable{
        public static final int ic_add=0x7f0a0000;
        public static final int ic_edit=0x7f0a0001;
    }
    public static final class mimap{
        public static final int ic_launcher=0x7f0b0000;
    }
}

来自Android官方网站:

Resources are the additional files and static content that your code uses, such as bitmaps, layout definitions, user interface strings, animation instructions, and more.

这意味着res文件夹是read-only并且您不能修改(添加、更新、删除)内容端。

回到你的问题,当你创建了 raw 文件夹但没有在里面放任何文件并且 android 知道在运行时你也不能修改这个文件夹,所以为什么我们需要不再创建对 raw 资源的引用。它没有任何意义。因为 R.java 中没有 raw class 所以你的编译器显示错误。

cannot resolve symbol raw

但是如果您创建一个文件并放入 raw 文件夹,那么在构建过程之后,将在 R.java 文件中创建一个 class raw

public final class R {
    public static final class layout{
        public static final int main_activity=0x7f0a0000;
        public static final int login_activity=0x7f0a0001;
    }
    public static final class drawable{
        public static final int ic_add=0x7f0a0000;
        public static final int ic_edit=0x7f0a0001;
    }
    public static final class mimap{
        public static final int ic_launcher=0x7f0b0000;
    }

    public static final class raw {
        public static final int sound=0x7f0b0000;
    }
}

现在错误消失了。