2011-03-06 15 views
16

Soy nuevo en Android (pero no en Java), sigo el ejemplo Note Note Note 1 pero recibo un error extraño al ejecutarlo en un dispositivo virtual (Hello World funcionó bien en este mismo vd):Excepción "Recurso no encontrado" al intentar cargar recursos en NotepadV1 sample exercice

Recibo una excepción de "recurso no encontrado" cuando se ejecuta el programa. La ID utilizada es correcta (Eclipse me la muestra como una propuesta de autocompletado, y está bien definida en R.java). Si uso directamente la cadena en lugar de la ID del recurso, todo está bien.

Aquí es mi 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> 

Y aquí es donde la función se produce la excepción:

@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; 
} 

La línea comentada es la que lanza una excepción. Como puede ver, al pasar directamente la cadena en lugar de la ID del recurso, pasa. He intentado cargar este recurso en otro lugar del mismo programa, y ​​la excepción se lanza a todas partes. Otros recursos se utilizan en otros lugares del programa, sin problemas.

¿Alguien tiene una idea? ¿Me perdí algo?

Muchas gracias por sus ideas

+13

sugerencia al azar: has intentado limpiar el proyecto (Proyecto -> Limpiar ... en Eclipse) –

+0

¿Qué error obtienes? –

+1

Solo una comprobación: ¿está su string.xml en un directorio/res/values ​​/? –

Respuesta

33

he tenido el mismo problema y la limpieza del Proyecto en Eclipse lo resolvieron.

+1

Lo mismo aquí. Aunque no ocurre cada vez que agrego un recurso (diseño, cadena, etc.). Pero a veces lo hace. Limpiar el proyecto siempre ayuda. ¿Por qué sucede esto? ¿El archivo java generado es correcto? ¿Quizás el paquete APK tiene fallas? – miha

1

muy extraño, pero yo era capaz de conseguir que esto funcione haciendo referencia a la cadena como getResources().getString(R.string.menu_insert)

y reordenando las constantes de cadena en el archivo R.java. no_notes tenía un valor superior a menu_insert, pero se incluyó antes de menu_insert. Así que les clasificado por orden de constante numérica, y funcionó:

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; 
} 

Acceso a la cadena a través de getResources().getString() por lo general es suficiente, por lo que este debe haber algún error en Eclipse o el SDK.

+0

Según tengo entendido, nunca debes modificar el archivo 'R.java'? – Gaffi

+0

" Nunca digas nunca ". No debes convertirlo en una actividad común, y no incluirlo esta vez, probablemente lo haya hecho una vez. O sea, en raras ocasiones. – adamcodes

+0

Lo suficiente. Seguimiento P: ¿Cómo evita que el sistema deshaga su cambio (asumiendo que el problema persiste) después de una limpieza/reconstrucción, dado que el eclipse (lo que he estado usando) siempre se regenera ¿Este archivo? – Gaffi

0

Agregarlo manualmente a strings.xml en lugar de usar la pestaña "Recursos" me ayudó.

0

Intente eliminar el archivo R de la carpeta gen Eclipse. Luego será regenerado y el problema será resuelto.

0

pienso:

de recursos:

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

Código:

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

tuve un problema similar cuando Retitulé (con refactor) un proyecto. Clean no ayudó, pero el reinicio de Eclipse ayuda.

Cuestiones relacionadas