2013-02-23 5 views
14

Quindi tutto andava abbastanza bene, fino a poco fa quando R.java ha deciso di avere questo errore dopo aver aggiunto un'icona (5_content_new.png, per l'esattezza).Errore strano in R.java, anche dopo la pulizia del progetto: "I caratteri di sottolineatura possono essere utilizzati solo con il livello di origine 1.7 o superiore"

Ho provato a pulire il progetto e riavviare eclissi, inutilmente.

Il codice problema:

public static final class drawable { 
    public static final int 5_content_new=0x7f020000; 
    public static final int ic_launcher=0x7f020001; 
    ... 
} 

Viene visualizzata la linea rossa proprio sotto 5_, e l'errore dice:

Underscores can only be used with source level 1.7 or greater

Qualcuno ha riscontrato un problema simile prima?

+1

I nomi delle variabili devono iniziare con una cifra diversa. Una cifra indica un numero e i numeri possono avere solo caratteri di sottolineatura in java 1.7 e versioni successive. –

risposta

23

Questa è una combinazione delle due cose:

  1. identificatori Java non possono iniziare con una cifra. Il primo personaggio dovrebbe essere una lettera.

  2. In Java 7, hanno introdotto sintassi alternative per valori letterali interi; per esempio. 1_000 corrisponde a 1000.

Quindi, ciò che sta accadendo è che il compilatore è l'analisi 5_content_new come 5_ content_new ... che è ragionevole se il livello della sorgente è stato Java 7, e quindi che non si sta utilizzando Java 7. dire se tu fossi stato utilizzando Java 7, quell'errore di compilazione sarebbe stato sostituito da un errore che diceva che un letterale intero (5_) non era legale in quel punto.

In breve, il codice contiene qualcosa di "off the wall" che lo scrittore del compilatore non ha previsto nel codice di diagnostica del compilatore.


L'altro punto è che utilizzando qualsiasi sottolineatura in un nome di variabile, metodo, classe o un pacchetto in Java è una violazione stile. I caratteri di sottolineatura dovrebbero essere utilizzati solo nei nomi costanti di maiuscole come "MAX_VALUE".

+0

Molto informativo! R.java viene generato quando viene creato un progetto Android, mentre le lettere minuscole e i trattini bassi sembrano essere gli stili usati dalle persone per le risorse. È molto probabile che ciò avvenga perché sono referenziati in xml, anche se non ho alcuna autorità sulle convenzioni sui nomi :) –

+1

Sì ... gli errori di stile nel codice generato sono sfortunati, ma non dovresti * aver * bisogno di guardare esso. In questo caso, sembra che qualsiasi cosa abbia generato "R.java' ha un bug ... –

+0

I caratteri di sottolineatura possono essere usati come separatori in cui il caso cammello non funziona bene. Per esempio. Avere URL come parte del nome della classe. –

3

ho appena provato a cambiare titolo un drawable esistente in una compilazione-fine progetto Android di mine ed Eclipse buttato questa finestra di dialogo fino:

Eclipse Error (Se non è possibile vedere l'immagine molto bene, la finestra di dialogo è dicendo Il nome della risorsa deve iniziare con un carattere.

Il modo in cui ho prodotto questa finestra di dialogo è stata rinominare un file disegnabile. Il nome originale del drawable era button_blue_normal.9.png, rinominato a 5_button_blue_normal.9.png e premette entrare. Dialog spuntato subito dopo aver premuto inserire.

Non l'ho mai saputo ma a quanto pare avrete bisogno di un carattere di lettera, non una cifra, proprio all'inizio del nome del file di un disegnabile.

+1

Grazie! Ciò avrebbe in realtà senso, visto che i nomi delle variabili (iirc) non dovrebbero iniziare con i numeri in java. –

+0

Sei semplicemente eccezionale: D: D +1 –

1

So che sono in ritardo per la festa ma mi sono imbattuto in questo da solo quando ho iniziato a lavorare con il componente ActionBar.

La risposta di ScootrNova mi ha portato alla soluzione. Il problema era il pacchetto di icone consigliato da Android che ho scaricato per l'utilizzo nelle esercitazioni. Tutti i nomi di file sono iniziati con numeri interi (1_xxx.png, ecc.). Ho rimosso quelli che non stavo usando, rinominato gli altri a qualcosa che iniziava con una lettera (ho usato "icon_xxx.png" come esempio), e compilato senza errori.

+0

Sì, questo è lo stesso problema che ho avuto. 5_content_new.png era nel pacchetto di icone –

1

Ho avuto lo stesso problema e l'ho risolto dopo aver inserito cifre dopo testo non all'inizio. Avevo la linea 2_Attività e l'ho modificata in Activity2. Era la mia soluzione Spero che possa aiutare qualcuno.

0

Ho avuto lo stesso problema. Risoluzione: guarda i file res, i file estraibili o all'interno di xml e rinomina i file o le stringhe che iniziano con (stringa di sottolineatura numero) 1_stringa a stringa_1.

Spero che questo aiuti a risolvere il problema.

Problemi correlati