尝试在NotepadV1示例中加载资源时“资源未找到”异常

时间:2011-03-06 19:10:41

标签: android exception resources

我是Android的新手(但不是Java),我按照示例exercice NotepadV1但在虚拟设备上执行时遇到奇怪的错误(Hello World在同一个vd上工作正常):

运行程序时出现“未找到资源”异常。使用的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时,它会通过。 我试图在同一个程序中的其他位置加载此资源,并且在任何地方都会抛出异常。其他资源在程序的其他地方使用,没有问题。

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

非常感谢你的想法

6 个答案:

答案 0 :(得分:33)

我遇到了同样的问题,清理Eclipse中的Project解决了它。

答案 1 :(得分: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中的一些错误。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分: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));

答案 5 :(得分:0)

当我重命名(使用重构)项目时,我遇到了类似的问题。 Clean没有帮助,但Eclipse重启确实有帮助。