文件夹为空时无法解析原始符号
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
例如 layout
、drawable
、mipmap
等时。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;
}
}
现在错误消失了。
当我尝试使用以下代码 Field[]fields=R.raw.class.getFields();
当我将任何文件添加到 raw 文件夹时,相同的代码有效。该文件夹位于 "res" 目录中。
注意:我也试过使用完整的包名。
我认为问题是您使用了错误的 R 包。 确保 R 应该来自您的包名称而不是其他一些 android Native class.
当您创建 Android resource folder
例如 layout
、drawable
、mipmap
等时。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;
}
}
现在错误消失了。