2012-06-29 2 views
4

Я столкнулся с очень неприятной проблемой с одним из моих приложений.Ошибка Android NoSuchField в R.java после завершения процесса

У меня есть активность с заставкой, которая загружает некоторые исходные данные для моего приложения, а затем запускает основное действие и заканчивается сама.

Как только основное действие выполняется, я запускаю приложение, нажав домашний ключ, а затем убью процесс для своего приложения.

Когда я перезапустить мое приложение, то SplashScreen пытается бежать, но не как только я пытаюсь получить доступ к любому из полей в моем R.java файле:

К примеру, я сразу попытаться установить текст TextView так:

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

Это проливает следующее исключение:

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

Затем, когда я запускаю его снова это нормально.

Я получаю такое же поведение, если я убью приложение с помощью инструмента TaskKiller (что-то, о чем я знаю, многие пользователи будут наивно использовать подозреваемые) или если ОС убивает мой процесс.

Любые идеи?

EDIT:

Просто заметил в LogCat, как раз перед OnCreate() это действие выполняется следующее регистрируется:

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 

Эти три случая, когда я пытаюсь получить доступ к R. id в моем классе.

Одна вещь, чтобы отметить, что я называю:

setContentView(R.layout.ps_splashscreen); 

и, кажется, для запуска этой строки штраф, так что это R.id-х в частности, что, кажется, не хватает.

EDIT: Вот раскладка:

<?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

Вы можете разместить код и расположение XML для экранной заставки? –

ответ

13

я была такая же проблема, и она дала мне

DexOpt: couldn't find static field 

ошибка, потому что у меня было два формата xml-файлов с тем же именем, один во внешней библиотеке один в проекте. Я не знаю, может ли это быть полезным для других :)

+0

Да, это была проблема, если я правильно помню. Идентификатор был в файле макета в проекте библиотеки, я переопределил файл макета, предоставив макет с тем же именем в проекте, который использовал библиотеку. Тем не менее, я не добавил элемент, Id которого я пытался найти во время компиляции, поле не было создано и, следовательно, исключение NoSuchField. –

+0

Я искал часы, чтобы решить эту проблему, и это было просто !. большое спасибо – elbaulp

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

     setcontentview(R.layout.yourlayout); 

// clen code then run again. 
+0

заявил в своем посте, что я вызвал setcontentview - как бы он справился с успехом в первый раз, если бы я не определял макет ?! –

0

Думаю, я тоже вижу эту проблему. Вы ссылаетесь на проект библиотеки? Если это так, статичность из R.java может отсутствовать, потому что Eclipse вырезал ее, когда импортировал R.java в ваш проект из другой библиотеки.

См: https://stackoverflow.com/a/26791329/1748628

Смежные вопросы