2011-10-25 17 views
5

Estoy trabajando en un nuevo proyecto antiguo ... Lo estoy haciendo para un mercado diferente del país, y cuando copié el código de un proyecto anterior, se muestra algunos errores como MIGRATE ANDROID CODE (A partir del ADT 14, los campos de recursos no se pueden usar como casos de conmutación). Esto ocurre para los recursos que están en el archivo strings.xml y para el diseño. Pero no me da una solución posible ... ¿cómo puedo solucionarlo ??? Aquí está el código:Los ID de recursos de Android de repente no son definitivos, los campos no se pueden resolver

@Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      //Here is mistake 
      setContentView(R.layout.main); 

      //Kreira AlertDialog sa dva dugmeta koji ce se pojaviti pri aktiviranju aplikacije 
      ad = new AlertDialog.Builder(this).create(); 
//And HERE 
      ad.setTitle(getString(R.string.vasa_trenutna_lokacija)); 
      //And HERE 
ad.setMessage(getString(R.string.da_bi_ste_koristili_aplikaciju)); 
      //And HERE 
      ad.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.dozvoli), new DialogInterface.OnClickListener() { 

      //Klikom na dugme Dozvoli otvara se novi prozor 
      @Override 
      public void onClick(DialogInterface ad, int which) { 
       Intent i = new Intent(NiskiMerakActivity.this, TrenutnaLokacija.class);    
       startActivity(i); 
       finish(); 
       } 
      }); 

      ad.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.ne_dozvoli),new DialogInterface.OnClickListener() { 

      //Klikom na dugme Ne dozvoli aplikacija se zatvara 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        finish(); 

       } 
      }); 
+1

favor, publique sus Logcat. Espero que no obtenga el error causado por la importación del archivo R en su clase. – Hiral

+0

¿Qué error o excepción está obteniendo por el camino ?????? –

+0

Estúpido de mi !!!! Importé android.R, pero para algunos reson no importé todo de R. Agregué. * En el y y ahora parece que está bien! Gracias .... Ponlo como una respuesta y lo verificaré verdadero ... – Jovan

Respuesta

7

A partir del ADT 14, los campos de recursos no se pueden usar como cajas de cambio.

Me pasó a mí también, obtuve este error aunque no estaba usando la variable R en una declaración de cambio. No se deje engañar por el mensaje de error. Básicamente tienes un error que se relaciona con el archivo R.java. Asegúrate de no importar R.java ya que debes tener el tuyo. Elimine su archivo R.java, compile el proyecto y vea si se genera su archivo R.java. De lo contrario, podría tener un error que impida que su archivo R.java se actualice. Pruebe Project> Clean para encontrar cualquier error. Deshágase de los errores y reconstruya su proyecto para que su archivo R.java se genere y esté actualizado.

+0

Esto es completamente falso. Estoy usando ADT 16 y estoy usando campos de recursos como variables de casos, y las constantes de mi archivo R son todas finales. –

+5

@JasonRobinson a partir del ADT 14 las constantes R no son definitivas en proyectos de biblioteca. Ver http://tools.android.com/tips/non-constant-fields – johlo

+1

@johlo Tal vez revirtieron ese cambio en una versión posterior, porque mis ID definitivamente son 'finales' y ahora estoy usando ADT 20. –

5

Probablemente sólo tiene que Clean su proyecto, es decir, del proyecto -> Limpiar en el menú principal. No debería haber errores en el código anterior. El problema es solo con las declaraciones switch. Intente limpiar y comente aquí cuál es el resultado.

+0

Ver un comentario bajo mi pregunta ... pero se refería a una declaración de cambio ... i No sé por qué ... Gracias de todos modos ...: D – Jovan

11

Citando http://tools.android.com/tips/non-constant-fields

La solución para esto es simple: Convertir la sentencia switch en una sentencia if-else.

Desde el fragmento de código anterior no parecen tener una declaración switch(), sin embargo, su pregunta se refiere a una declaración switch(), que se supone que tiene un código incorrecto.

+0

Ver un comentario bajo mi pregunta ... pero se refería a una declaración de cambio ... no sé por qué ... Gracias de todos modos ...: D – Jovan

+1

Gracias :) Esto lo resolvió para mí. – bencallis

+0

Esta es la solución más simple para mí. ¡Gracias! – Ric17101

2

i fijo esto cambiando mi importar de android.r; a android.R.*;

Se borra todos mis errores y yo era capaz de compilar mi aplicación de nuevo.

+0

También podría eliminar esa línea de importación para que quede más limpia. – kuchi

0

Simplemente seleccione en el proyecto eclipse -> limpiar, y el problema fue resuelto. Obtuve este error simplemente creando un nuevo paquete en mi aplicación y eliminándolo.

0

Estos son los pasos que me ayudan a resolver este problema.

  1. Eliminar R.java (Eclipse volverá a crear de inmediato. Si no hay un problema con el código o el diseño)
  2. Limpiar el proyecto (menú 'Proyecto' Eclipse & 'Clean'
  3. la recompilación proyecto

Estos pasos resuelven el problema con mi trabajo.

+0

¡Bienvenido a Stack Overflow! Tenga cuidado cuando publique copiar y pegar respuestas al pie de página o verbatim a preguntas múltiples, estas tienden a ser señaladas como "basura" por la comunidad. Si está haciendo esto, generalmente significa que las preguntas son duplicadas, por lo tanto, márquelas como tales. – Kev

+0

Gracias Kev por su orientación. Referiré mi respuesta en el futuro. –

1

Hoy estaba enfrentando el mismo error, mi proyecto eclipse tiene 1 biblioteca de proyectos agregada, y estaba a punto de cambiar todo el código a sentencias if, pero me di cuenta de que mi proyecto tenía la verificación de biblioteca activada, en project -> properties -> Android, así que simplemente lo rechacé y esa fue la solución al problema, también fue una sugerencia de eclipse, leyendo cuidadosamente el código de migración android y 14 constantes de advertencia para las bibliotecas de proyectos.

+0

+1 Si la propiedad "Is Library" está marcada, el archivo R generado declara los identificadores como "public static int" en lugar de "public static final int" - de ahí el mensaje de error.Presumiblemente, esto tiene que ver con hacer que los identificadores sean visibles externamente en lugar de permitir que el compilador los optimice. – MZB

1

Encontré que funciona después de cambiar la declaración de importación para que R incluya su nombre de paquete.

Por ejemplo:

import android.R;

es ahora

com.name.package.R importación;

0

Probé todos los enfoques mencionados anteriormente con respecto a eliminar el archivo R.java generado, limpiar, reconstruir, etc. pero ese enfoque no funcionó para mí.

Lo que funcionó fue reemplazar la carcasa con una cadena de otros, que en mi opinión era una solución desordenada, pero no pude conseguir que funcionara de otra manera.

Estoy usando Eclipse 4.2.1 y 4.2.2 SDK de Android

8

si su switch de los casos de los identificadores se encuentra dentro de una biblioteca, lamentablemente las nuevas versiones de ADT no lo soportan.

Sin embargo, se puede convertir fácilmente a if-else, como se muestra en la página web de Google:

http://tools.android.com/tips/non-constant-fields 
Cuestiones relacionadas