переключение на операторы if-else - PullRequest
4 голосов
/ 06 декабря 2011

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

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

Ниже приведен пример кода из учебника.который относится к моему вопросу:

@Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.timeline);

По-видимому, начиная со вступления ADT 14, вы больше не можете использовать фразу (R.layout.timeline), которую в сообщении об ошибке называется «оператор switch»."

Теперь, в сообщении, которое я нашел на другом сайте, кто-то, у кого была похожая проблема, показывает скриншот" быстрого исправления "в Eclipse, используя ctrl + 1.на скриншоте всплывающее исправление гласит «преобразовать переключатель в оператор if-else».Это исправление не появляется в моей версии Eclipse.Мои варианты быстрого исправления: «перенести код Android», «создать поле« timeline »в типе« layout »», «создать постоянную« timeline »в типе« layout »» или «переименовать в файл».

Если я выберу «перенести код Android», появится окно, информирующее меня об обновлении ADT 14 и о том, как операторы switch больше не разрешены в проектах библиотеки.В нем говорится, чтобы преобразовать оператор switch в оператор if-else, нажав Ctrl + 1 для быстрого исправления, а затем выбрав «switch to if-if», как это показано на скриншоте, который я нашел.Но опять же, когда я делаю это, эта опция не появляется.

Я бы лучше знал, что нужно изменить в коде, чем знал бы, как сделать правильное быстрое исправление всплывающим.Если это не так уж сложно, объяснение того, почему именно эти изменения являются эффективными, было бы очень полезно.У меня сейчас много (МНОГИЕ) ошибок в моих java-файлах, но большинство из них вызваны именно этой проблемой в разных формах.Если бы я мог видеть только один пример до / после, я бы, вероятно, понял это оттуда без объяснения причин.Но после нескольких часов поисков я не могу найти это, пока гуглю.

Заранее большое спасибо ....

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

Ответы [ 6 ]

14 голосов
/ 06 декабря 2011

Убедитесь, что вы нажали само ключевое слово switch, а затем нажмите Ctrl + 1 .
Это меня сначала смутило ...

Если он по-прежнему не отображается, какую версию Eclipse вы используете?

Если вы используете Mac, выберите ключевое слово switch и нажмите Shift + Команда + 1 .
Это покажет приглашение изменить условия switch на if else.

2 голосов
/ 24 января 2012

У меня были такие же проблемы. Для меня я включил view.getId (). Перед переключением объявите int id = view.getId () ;. Затем включите идентификатор. Затем вы можете нажать Ctrl + 1, и появится «Конвертировать в If / Else».

Они внесли это изменение, чтобы уменьшить скорость сборки. Мои проекты сейчас строятся примерно в 1/10 времени. Я рад, что обновил ADT.

0 голосов
/ 17 июня 2013

Как-то я переутомил эту ошибку.Я удалил свой проект из рабочей области.Вернул .project файлы к старым, переданным в SVN.Затем в Eclipse удалите ADT и установите его снова.Затем импортируйте мой проект.-> Библиотеки добавляются по-старому, и в результате все поля в R.java теперь являются окончательными.Надеюсь, это поможет.

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

Вам нужно поместить проклятие прямо перед символом s в переключателе слов и нажать cmd 1. Если вы переключите операторы, у которых есть сквозные предложения, опция преобразования не будет доступна.

0 голосов
/ 15 февраля 2012

Я надеюсь, у вас все работает.

Я согласен, что это звучит как какая-то странная ошибка Eclipse, которая не та, что кажется, и не то, что говорит Quick Fix. Затмение, как известно, время от времени лгало. Очистка вашего проекта (как сказал @Stephen Dubya), вырезание нарушающего кода, сохранение файла, вставка его обратно и сохранение снова ... это некоторые из неочевидных приемов, которые иногда заставляют Eclipse работать.

В общем, я думаю, что было бы хорошо, если бы вы лучше познакомились с некоторыми из основ Java вроде switch; Я думаю, что это сделает ваше изучение Android намного проще. Хотя инструменты и документация продолжают совершенствоваться, Android все еще молод и его не всегда легко освоить с помощью учебных пособий, особенно когда вы совсем не привыкли писать код или используете сложные IDE, такие как Eclipse.

Но я отвлекся. Только в Android проектах библиотеки , а не в обычных проектах, Android не обрабатывает ресурсы как константы (final переменные), начиная с ADT 14. Это означает, что в проектах библиотек вы не можете использовать R.layout.timeline или подобные переменные ресурса в ваших switch выражениях. Вы можете только switch для целых чисел или значений перечисления.

Использование if-else всегда может быть лучшим выбором. switch может, особенно для начинающих, привести к логическим ошибкам в вашем коде, и все, что вы можете написать с помощью switch, может быть переписано с использованием блоков if-else. Лично я вообще перестал использовать switch в Android и другом Java-коде.

0 голосов
/ 06 декабря 2011

Мне кажется, что у вас нет ресурса timeline .

Разбивка R.layout.timeline

R относится к Ресурсам

макет относится к коллекции макетов в вашем приложении

и временная шкала относится к конкретному ресурсу, который вы пытаетесь применить setContentView () тоже.

Если моя догадка верна, у вас нет временной шкалы ресурс.Создайте новый файл XML в папке макета в eclipse и назовите его «timeline». Это должно решить проблему.

...