我是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时,它会通过。 我试图在同一个程序中的其他位置加载此资源,并且在任何地方都会抛出异常。其他资源在程序的其他地方使用,没有问题。
有人有想法吗?我错过了什么吗?
非常感谢你的想法
答案 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重启确实有帮助。