在NotepadV1示例练习中尝试加载资源时出现“未找到资源”异常。

16

我对Android开发很新(但不是对Java),我遵循了示例练习NotepadV1,但在虚拟设备上执行时出现了奇怪的错误(Hello World在同一虚拟设备上运行良好):

运行程序时出现“资源未找到”异常。所使用的ID是正确的(Eclipse将其显示为自动完成建议,并且在R.java中定义良好)。 如果我直接使用字符串而不是资源ID,则一切都正常。

以下是我的string.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string
        name="app_name">Notepad v1</string>
    <string
        name="no_notes">No Notes Yet</string>
    <string
        name="menu_insert">Add Item</string>
</resources>

这里是抛出异常的函数:

@Override
public boolean onCreateOptionsMenu( Menu menu )
{
    boolean result = super.onCreateOptionsMenu( menu );
    // menu.add( 0, INSERT_ID, 0, R.string.menu_insert ); // exception !
    menu.add( 0, INSERT_ID, 0, "Add Item" ); // ok like this
    return result;
}

被注释掉的那一行是引发异常的代码。如您所见,直接传递字符串而不是资源ID时,它可以通过。

我已经尝试在程序的其他位置加载此资源,并且无论在哪里都会引发异常。程序中其他地方使用的其他资源没有问题。

有人有什么想法吗?我错过了什么吗?

非常感谢您的建议。


13
随机建议:您尝试过清理项目吗?(在Eclipse中选择“项目”->“清理...”) - Gautier Hayoun
1
只是检查一下:你的string.xml文件是否在/res/values/目录中? - Peter Knego
这是一个警告吗?在logcat中显示"资源不包含包"? - Wayner
@user 你应该把“清理”建议变成一个答案并接受它。 - mgalgs
@Gautier:谢谢,这对我有用。多么奇怪的问题啊!:( - emeraldhieu
显示剩余2条评论
6个回答

34

我曾经遇到过同样的问题,在Eclipse中清除项目可以解决它。


1
一样的问题。虽然并不是每次我添加资源(布局、字符串等)时都会发生,但有时确实会出现。清理项目总是有帮助的。但是为什么会发生这种情况,因为生成的java文件是正确的?也许APK打包存在问题? - miha

1
非常奇怪,但是我通过引用字符串 getResources().getString(R.string.menu_insert) 使其工作。
并且通过重新排列 R.java 文件中的字符串常量。 no_notes 的值比 menu_insert 高,但是在 menu_insert 之前列出。所以我按照数字常量的顺序列出它们,然后它就可以工作了:
public static final class string {
    public static final int app_name=0x7f040000;
    public static final int menu_insert=0x7f040001;
    public static final int no_notes=0x7f040002;
}

通常通过getResources().getString()访问字符串就足够了,所以这一定是Eclipse或SDK中的某个错误。


我的理解是,你永远不应该修改R.java文件? - Gaffi
“永远不要说永远。”你不应该把它变成一种常见的活动,而且除了这一次,我大概只做过一次。所以这是极其罕见的场合。 - adamcodes
好的。后续问题:如果问题仍然存在,如何防止系统在清理/重建后撤消您的更改(假设我一直在使用的是Eclipse),因为它总是重新生成此文件? - Gaffi

0

我认为:

资源:

<?xml version="1.0" encoding="utf-8"?>   
<resources>   
    <string name="exEditTextEmpty">Program could not get access to EditText view</string>
</resources>  

代码:

Exception ex = new Exception(getResources().getString(R.string.exEditTextEmpy));

0

我在重命名(使用重构)项目时遇到了类似的问题。清理并没有帮助,但是重新启动Eclipse确实有所帮助。


0
尝试从Eclipse文件夹的gen中删除R文件。然后它将被重新生成,问题有望得到解决。

0
手动将其添加到strings.xml而不是使用“资源”选项卡对我很有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接