2011-10-25 11 views
5

Sto lavorando a un progetto nuovo-vecchio ... Lo sto facendo per un mercato diverso, e quando ho copiato il mio codice da un vecchio progetto mostra qualche errore come MIGRATE ANDROID CODE (A partire da ADT 14, i campi di risorse non possono essere usati come casi di switch.) Questo accade per una risorsa che si trova nel file strings.xml e per il layout. Ma non mi dà qualche correzione possibile ... come posso risolverlo ???? Ecco il codice:ID risorsa Android improvvisamente non definitivo, i campi non possono essere risolti

@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

Si prega di inviare il vostro logcat. Spero, non riceverai errori causati dall'importazione di file R nella tua classe. – Hiral

+0

quale errore o eccezione stai ottenendo a proposito ?????? –

+0

Stupido da parte mia !!!! Ho importato android.R, ma per alcuni reson non ha importato tutto da R. I add. * Al e e ora sembra che sia okey !!! Grazie .... Mettilo come una risposta e lo verificherò vero ... – Jovan

risposta

7

A partire da ADT 14, i campi di risorse non possono essere utilizzati come casi di switch.

Questo è successo anche a me, ho ricevuto questo errore anche se non stavo usando la variabile R in un'istruzione switch. Non essere fuorviato dal messaggio di errore. Fondamentalmente hai qualche errore relativo al file R.java. Assicurati di non importare R.java poiché dovresti averne uno tuo. Elimina il tuo file R.java, crea un progetto e verifica se il tuo file R.java viene generato. In caso contrario, si potrebbe avere un errore che impedisce l'aggiornamento del file R.java. Prova Progetto> Pulisci per trovare eventuali errori. Sbarazzati degli errori e ricostruisci il tuo progetto in modo che il tuo file R.java venga generato e aggiornato.

+0

Questo è completamente falso. Sto usando ADT 16 e sto usando i campi delle risorse come variabili del caso, e le mie costanti del file R sono tutte definitive. –

+5

@JasonRobinson come da ADT 14 le costanti R non sono definitive nei progetti di libreria. Vedi http://tools.android.com/tips/non-constant-fields – johlo

+1

@johlo Forse hanno ripristinato tale modifica in una versione successiva, perché i miei ID sono decisamente "definitivi" e ora sto usando ADT 20. –

5

Probabilmente solo bisogno di Clean vostro progetto, vale a dire del progetto -> Pulire dal menu principale. Non ci dovrebbero essere errori nel codice sopra. Il problema è solo con le dichiarazioni switch. Si prega di provare a pulire e commentare qui qual è il risultato.

+0

Vedere un commento sotto la mia domanda ... ma si riferiva ad una dichiarazione di commutazione ... io non so perché ... Grazie comunque ...: D – Jovan

11

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

La soluzione per questo è semplice: convertire l'istruzione switch in un'istruzione if-else.

Dal momento che il frammento di codice di cui sopra non sembra avere una dichiarazione switch(), ma la tua domanda si riferisce a una dichiarazione switch(), io suppone che si abbia il codice errato.

+0

Vedere un commento sotto la mia domanda ... ma si riferiva ad una dichiarazione di commutazione ... non so perché ... Grazie comunque ...: D – Jovan

+1

Grazie :) Questo lo ha risolto per me. – bencallis

+0

Questa è la soluzione più semplice per me. Grazie! – Ric17101

2

Ho fissato questo cambiando il mio importazione android.r;-android.R.*;

Si schiarì tutti i miei errori e sono stato in grado di compilare di nuovo la mia app.

+0

Si potrebbe anche solo rimuovere quella linea di importazione per renderla più pulita. – kuchi

0

Basta selezionare nel progetto eclipse -> clean, e il problema è stato risolto. Ho ricevuto questo errore creando un nuovo pacchetto nella mia app e rimuovendolo.

0

Ecco i passaggi che mi aiutano a risolvere questo problema.

  1. Delete R.java (Eclipse ricreerà immediatamente. Se non c'è un problema con il codice o layout)
  2. Pulire il progetto (Eclipse menù 'Progetto' & 'Clean'
  3. ricompilare il progetto

Questi passaggi risolvono il problema con il mio lavoro.

+0

Benvenuti in Stack Overflow! Prestare attenzione quando si inviano copia e incolla di risposte boilerplate/verbatim a più domande, che tendono ad essere contrassegnate come "spammy" dalla comunità. Se lo fai, in genere significa che le domande sono doppie, quindi contrassegnali come tali. – Kev

+0

Grazie Kev per la vostra guida. Riferirò la mia risposta in futuro. –

1

Oggi stavo affrontando lo stesso errore, il mio progetto eclipse ha aggiunto 1 biblioteca di progetto e stavo per cambiare tutto il codice in istruzioni if, ma mi rendo conto che il mio progetto ha avuto il controllo della libreria, nel progetto -> proprietà -> Android, quindi ho appena abbassato e questa è stata la soluzione al problema, è stato anche un suggerimento di eclissi stessa, leggendo attentamente il codice di migrazione di Android 14 costanti avviso per le librerie di progetto.

+0

+1 Se la proprietà "Is Library" è spuntata, il file R generato dichiara gli identificatori come "public static int" piuttosto che "public static final int" - da qui il messaggio di errore.Presumibilmente si tratta di rendere gli identificatori esternamente visibili piuttosto che permettere loro di essere ottimizzati dal compilatore. – MZB

1

Ho trovato che funziona dopo aver modificato l'istruzione di importazione per R per includere il nome del pacchetto.

Per esempio:

import android.R;

è ora

import com.name.package.R;

0

Ho provato tutti gli approcci menzionati sopra per quanto riguarda l'eliminazione del file R.java generato, la pulizia, la ricostruzione, ecc. Ma questo approccio non ha funzionato per me.

Ciò che ha funzionato è stato sostituire il caso con una catena else-if che era una soluzione disordinata a mio parere, ma non riuscivo a farlo funzionare in nessun altro modo.

Sto usando Eclipse 4.2.1 e Android SDK 4.2.2

8

se il vostro switch-case degli ID è all'interno di una libreria, purtroppo le nuove versioni ADT non lo supportano.

Tuttavia, è possibile convertire facilmente per if-else, come indicato sul sito web di Google:

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