Intereting Posts
Почему мое приложение все еще отображается в диспетчере задач после его завершения Тестирование биллинга на Android-маркерах Android с фиктивными учетными данными кредитной карты Как играть в GIF в android ProgressBar в ActionBar, как последнее обновление приложения GMail Обслуживание локального веб-сайта через Bluetooth на мобильный телефон без использования Интернета Сохранить ArrayList для файла на Android Xamarin «пытается вызвать виртуальный метод» void android.view.View.unFocus (android.view.View) »на ссылке с нулевым объектом» Как получить имя оператора, подключенного к Интернету в телефоне с двумя SIM-картами? Как проверить подключение или отключить сетевое подключение в WIFI и 3G (план данных) на мобильных устройствах? Webview внутри фрагмента андроида открывается за пределами приложения в браузере Компонент Android DrawerLayout Различать разные маркеры в Maps API v2 (уникальные идентификаторы) Подключено мобильное устройство (Android) в качестве MTP, теперь мы можем получить доступ к этому устройству и получить время Для платформы отсутствует модуль Cordova – check_reqs. Пропуск Что использовать CursorAdapter?

Утверждение IF просто не работает

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

handleRequest(String str) { boolean foo = executeCommand(str); this.publishProgress("FOO1: " + foo); if (foo == false); { this.publishProgress("FOO2: " + foo); sendString("Failed to execute: " + str); } this.publishProgress("FOO3: " + foo); sendEOM(); } 

Приведенный выше код должен выполнить команду и сохранить «foo», если команда была выполнена правильно. Этот код находится внутри Android AsyncTask (поток), поэтому я использую «publishProgress», чтобы показать тост.

Я просматриваю отладчик, а FOO – это правда! Тосты показывают, что FOO может быть правдой и на всем пути. Однако он идет вперед и прыгает внутри блока IF и выполняет это тоже. Я никогда не видел этого раньше, я думаю, что это проблема с Java. Я выполнял операцию «executeCommand», и похоже, что она также пропускает операторы return.

Я запускаю код на виртуальном устройстве и реальный, и они оба это делают.

Есть идеи? Я здесь совершенно не понимаю.

Solutions Collecting From Web of "Утверждение IF просто не работает"

Ты сказал

  if (foo == false); 

Удалите точку с запятой, она должна быть

  if (foo == false) {//your code} 

Удалить точку с запятой: if (foo == false); -> if (foo == false)

Вы ставите точку с запятой после if .

Таким образом, ваш оператор if существует сам по себе, и следующий блок кода всегда работает.

Измените свой код следующим образом:

 handleRequest(String str) { boolean foo = executeCommand(str); this.publishProgress("FOO1: " + foo); if (foo == false) { this.publishProgress("FOO2: " + foo); sendString("Failed to execute: " + str); } this.publishProgress("FOO3: " + foo); sendEOM(); } 

NB
Сохранение брекетов с открыванием блока в той же строке, что и определение функции / условия цикла, делает такие ошибки намного менее частыми, ИМО.

Здесь не будет ";" Точка с запятой после if.

Поэтому вместо if (foo == false); Это должно быть, если (foo == false){}

Если вы пишете точку с запятой (;) после того, как оператор if завершает условие if там! Вам нужно запустить блок кода после записи, если условие ie

 if(foo == false){ // block of Code } //end of if condition 

Я не знаю, как эта строка компилируется if (foo == false); , Но, очевидно, это так. Вам нужно удалить точку с запятой в конце строки, как упомянули другие. С; Там это означает ничего не делать, если foo ложно. Затем программа переходит в следующий блок между двумя фигурными фигурными скобками. Вам необходимо установить findbugs или PMD, чтобы предупредить об этом опечатках.