Intereting Posts
Как передать несколько параметров в URL? Android: onSaveInstanceState () и onPause () Использование сканера штрих-кода zxing на веб-странице В чем разница между названием и отображаемым именем Не удалось синхронизировать Gradle: не удалось обновить плагин Android до версии 2.0.0, Запись видео на Android с поверхности OpenGL (GLSURFACEVIEW) Насколько надежным является LocationListKenownLocation LocationManager и как часто он обновляется? Неисправность уведомления о статусной панели Android? Что означает эта ошибка: «Предварительный просмотр графики в редакторе макетов может быть неточным: Paint.setShadowLayer не поддерживается»? Значки AccountAuthenticator Рекомендуется ли проверять представление для null при каждом вызове findViewById? Почему вы не можете напрямую использовать тип в java? Не удалось получить AppCompat ActionBar / Toolbar, чтобы стать наложением Обновление списка в фрагменте из широковещательного приемника Почему Volley возвращается к SSLV3?

Ошибка Android NoSuchField в R.java после процесса

Я столкнулся с очень неприятной проблемой с одним из моих приложений.

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

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

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

Например, я сразу же пытаюсь установить текст текстового вида следующим образом:

((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 (что-то, что я знаю, многие пользователи будут наивно использовать подозреваемые) или если ОС убивает мой процесс.

Есть идеи?

РЕДАКТИРОВАТЬ:

Просто заметив в 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 

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

Следует отметить, что я звоню:

 setContentView(R.layout.ps_splashscreen); 

И кажется, что эта строка отлично подходит, так что именно в ней явно отсутствует.

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> 

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

 DexOpt: couldn't find static field 

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

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

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

 //Have you Define this line in your oncreat method setcontentview(R.layout.yourlayout); // clen code then run again.