2012-06-29 3 views
4

J'ai rencontré un problème très frustrant avec l'une de mes applications.Android NoSuchField erreur dans R.java après le processus est tué

J'ai une activité splashscreen qui charge des données initiales pour mon application, puis lance l'activité principale et se termine.

Une fois l'activité principale en cours, j'applique l'application en appuyant sur la touche d'accueil, puis je mets fin au processus de mon application.

Quand je relance mon application, l'splashscreen essaie de courir, mais échoue dès que je tente d'accéder à l'un des champs dans mon fichier R.java:

Par exemple, j'essaie immédiatement de mettre le texte de un textview comme ceci:

((TextView)findViewById(R.id.splash_tv_1)).setText(application.getLanguage().pleasewait); 

Ce lève l'exception suivante:

06-29 11:18:14.661: ERROR/AndroidRuntime(21427): java.lang.NoSuchFieldError: com.pagesuite.android.reader.framework.R$id.splash_tv_1 

Puis, quand je lance à nouveau c'est bien. Je reçois le même comportement si je tue l'application en utilisant un outil TaskKiller (quelque chose que je sais que beaucoup d'utilisateurs utiliseront naïvement je suspecte) ou si le système d'exploitation tue mon processus.

Des idées?

EDIT:

Juste remarqué dans le logcat, juste avant onCreate() de cette activité exécute, ce qui suit est enregistré:

06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1945 (splash_logo) in Lcom/pagesuite/android/reader/framework/R$id; 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: dead code 0x0002-0010 in Lcom/pagesuite/android/reader/framework/activities/PS_Splashscreen;.loadLogoImg (Lcom/pagesuite/android/reader/framework/xml/appsettings/PS_AppSettings;)V 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): DexOpt: couldn't find static field 
06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1946 (splash_tv_1) in Lcom/pagesuite/android/reader/framework/R$id; 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: dead code 0x0002-0039 in Lcom/pagesuite/android/reader/framework/activities/PS_Splashscreen;.setLanguage()V 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): DexOpt: couldn't find static field 
06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1946 (splash_tv_1) in Lcom/pagesuite/android/reader/framework/R$id; 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000 
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: dead code 0x0002-0020 in Lcom/pagesuite/android/reader/framework/activities/PS_Splashscreen;.setTextColors()V 

Ce sont les trois cas où je tente d'accéder à R. id dans ma classe.

Une chose à noter est que j'appelle:

setContentView(R.layout.ps_splashscreen); 

et il semble fonctionner cette fin de ligne, il est donc plus précisément que semble de la R.id à manquer.

EDIT: Voici la mise en page:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:orientation="vertical" 
    android:gravity="center"> 

    <ImageView 
     android:id="@+id/splash_logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 


    <TextView 
     android:id="@+id/splash_tv_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Please wait" 
     android:textColor="@color/white" 
     android:textSize="20dip" /> 

    <TextView 
      android:id="@+id/splash_tv_2" 
     android:layout_marginTop="20dip" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Loading..." 
     android:textColor="@color/white" /> 

</LinearLayout> 

+0

Pouvez-vous poster le code et la mise en page de xml pour votre écran de démarrage? –

Répondre

13

i eu le même problème et il m'a donné

DexOpt: couldn't find static field 
012 Erreur

parce que j'avais deux fichiers XML de mise en page avec le même nom, un dans une bibliothèque externe dans le projet. Je ne sais pas si cela peut être utile aux autres :)

+0

Oui, c'était le problème si je me souviens bien. L'ID était dans un fichier de disposition dans le projet de bibliothèque, j'avais remplacé le fichier de disposition en fournissant une mise en page avec le même nom dans le projet qui utilisait la bibliothèque. Cependant, je n'avais pas mis dans l'élément dont j'essayais de trouver l'Id, donc au moment de la compilation le champ n'était pas généré et donc l'exception NoSuchField. –

+0

J'ai cherché des heures pour résoudre ce problème, et c'était juste ça !. Merci beaucoup – elbaulp

-1
//Have you Define this line in your oncreat method 

     setcontentview(R.layout.yourlayout); 

// clen code then run again. 
+0

déclaré dans mon post que j'avais appelé setcontentview - comment diable serait-il couru avec succès la première fois si je ne définissais pas une mise en page ?! –

0

Je pense que je vois ce problème aussi. Faites-vous référence à un projet de bibliothèque? Si c'est le cas, une statique de R.java peut être manquante parce qu'Eclipse l'a coupé quand il a importé R.java dans votre projet à partir d'une autre bibliothèque.

Voir: https://stackoverflow.com/a/26791329/1748628

Questions connexes