Идентификаторы ресурсов Android внезапно не являются окончательными, поля не могут быть разрешены - PullRequest
8 голосов
/ 25 октября 2011

Я работаю над новым старым проектом ... Я делаю его для рынка другой страны, и когда я копирую свой код из старого проекта, это показывает какую-то ошибку, такую ​​как MIGRATE ANDROID CODE (По состоянию на ADT 14 поля ресурса не могут быть использованы в качестве переключателей.) Это происходит для ресурсов, находящихся в файле strings.xml, и для макета. Но это не дает мне возможного решения ... как я могу это исправить ???? Вот код:

 @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();

                }
            });

Ответы [ 10 ]

12 голосов
/ 25 октября 2011

Цитирование http://tools.android.com/tips/non-constant-fields

Решение для этого простое: преобразовать оператор switch в оператор if-else.

Поскольку в приведенном выше фрагменте кода нет выражения switch(), но ваш вопрос относится к выражению switch(), я предполагаю, что у вас неправильный код.

10 голосов
/ 05 апреля 2014

, если ваш switch-case идентификаторов находится внутри библиотеки, к сожалению, новые версии ADT не поддерживают его.

Однако вы можете легко преобразовать его в if-else, как показано на сайте Google:

http://tools.android.com/tips/non-constant-fields
7 голосов
/ 04 ноября 2011

Начиная с ADT 14, поля ресурсов не могут использоваться в качестве переключателей.

Это тоже случилось со мной, я получил эту ошибку, хотя я не использовал переменную R в операторе switch.Не вводите в заблуждение сообщение об ошибке.У вас в основном есть ошибка, связанная с файлом R.java.Убедитесь, что вы не импортируете R.java, так как у вас должен быть свой собственный.Удалите свой файл R.java, создайте проект и посмотрите, сгенерирован ли ваш файл R.java.Если нет, у вас может быть ошибка, препятствующая обновлению вашего файла R.java.Попробуйте Project> Clean, чтобы найти ошибки.Избавьтесь от ошибок и перестройте ваш проект так, чтобы ваш файл R.java был сгенерирован и обновлен.

5 голосов
/ 25 октября 2011

Вероятно, вам просто нужно Clean ваш проект, т. Е. Project -> Clean из главного меню. Там не должно быть ошибок в коде выше. Проблема только с switch заявлениями. Пожалуйста, попробуйте очистить и прокомментировать здесь, каков результат.

2 голосов
/ 17 декабря 2011

Я исправил это, изменив свой импорт с android.r; на android.R.*;

Он очистил все мои ошибки, и я смог снова скомпилировать свое приложение.

1 голос
/ 27 ноября 2012

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

Например:

import android.R;

теперь

import com.name.package.R;

1 голос
/ 04 июня 2012

Сегодня я столкнулся с той же ошибкой, в моем проекте eclipse была добавлена ​​1 библиотека проектов, и я собирался изменить весь код на операторы if, но я понимаю, что в моем проекте была включена проверка библиотеки в проекте -> properties- > Android, так что я просто отказался, и это было решением проблемы, это также было предложением самого затмения, внимательно читая код миграции Android и 14 констант, предупреждающих для библиотек проектов.

0 голосов
/ 08 мая 2013

Я испробовал все упомянутые выше подходы, касающиеся удаления сгенерированного файла R.java, очистки, перестройки и т. Д., Но этот подход не сработал для меня.

Что сработало, так это замена корпуса на цепочку else-if, что, на мой взгляд, было грязным исправлением, но я не мог заставить его работать другим способом.

Я использую Eclipse 4.2.1 и Android SDK 4.2.2

0 голосов
/ 15 мая 2012

Вот шаги, которые помогают мне решить эту проблему.

  1. Удалить R.java (Eclipse воссоздает его немедленно. Если нет, проблема с кодом или версткой)
  2. Очистить проект (меню Eclipse «Проект» и «Очистить»
  3. Перекомпилируйте проект

Эти шаги решают проблему с моей работой.

0 голосов
/ 20 марта 2012

Просто выберите в проекте eclipse -> clean, и проблема была решена. Я получил эту ошибку, просто создав новый пакет в своем приложении и удалив его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...