Return to Video

05-39 Fix the Order Button - Solution

  • 0:00 - 0:03
    Нет одного правильного ответа
    на этот вопрос.
  • 0:03 - 0:06
    Все зависит от того, что для вас
    эффективнее в определении
  • 0:06 - 0:10
    разницы между корректной и
    некорректной работой приложения.
  • 0:10 - 0:13
    Вот что я заметила.
  • 0:13 - 0:16
    Когда приложение работает некорректно,
    при нажатии на кнопку Order
  • 0:16 - 0:20
    количество каждый раз изменяется
    на одну и ту же величину, хотя не должно.
  • 0:20 - 0:23
    Кроме того, я вижу, что
    цена была верной для этого количества,
  • 0:23 - 0:25
    но на самом деле
    цена должна быть указана
  • 0:25 - 0:28
    для последнего числа,
    выбранного вот здесь.
  • 0:28 - 0:32
    Это опять-таки связано с тем, что
    количество не должно меняться.
  • 0:32 - 0:34
    Давайте посмотрим на код и разберемся,
    почему так происходит.
  • 0:35 - 0:39
    В файле activity_main
    кнопка Order объявлена вот здесь.
  • 0:39 - 0:41
    При нажатии на кнопку Order
  • 0:41 - 0:43
    вызывается метод
    под названием submitOrder.
  • 0:43 - 0:48
    В файле MainActivity.java
    метод submitOrder находится здесь.
  • 0:48 - 0:51
    Это очень старый кусок кода,
    который мы еще не поменяли.
  • 0:51 - 0:55
    Здесь мы объявляем целую переменную
    quantity с начальным значением 5
  • 0:55 - 0:56
    и выводим ее на экран.
  • 0:56 - 1:01
    Мы также показываем стоимость, которая
    равна числу чашек кофе, умноженному на $5.
  • 1:01 - 1:04
    Этот код уже не очень логичный,
    поскольку при заказе
  • 1:04 - 1:07
    мы пытаемся обновить количество.
  • 1:07 - 1:09
    Еще одна проблема - это объявление
    целой переменной quantity,
  • 1:09 - 1:12
    когда у нас уже есть глобальная
    переменная quantity,
  • 1:12 - 1:14
    отслеживающая число чашек кофе.
  • 1:14 - 1:18
    В файле MainActivity у нас уже есть
    глобальная переменная quantity,
  • 1:18 - 1:23
    поэтому любой метод внутри этого кода
    может обращаться к этой переменной.
  • 1:23 - 1:27
    Однако в методе submitOrder мы объявляем
    новую локальную переменную quantity.
  • 1:27 - 1:30
    Формально у локальной переменной
    может быть такое же имя,
  • 1:30 - 1:32
    как и у глобальной переменной.
  • 1:32 - 1:35
    Просто в рамках этого метода
  • 1:35 - 1:39
    после объявления этой переменной
    каждый раз при обращении к quantity
  • 1:39 - 1:42
    вызываться будет
    локальная переменная со значением 5,
  • 1:42 - 1:44
    а не глобальная переменная
    со значением 2.
  • 1:44 - 1:46
    Так что и display(quantity),
  • 1:46 - 1:52
    и displayPrice(quantityx5)
    обращаются к этому значению quantity.
  • 1:52 - 1:54
    Вот область видимости
    этой локальной переменной.
  • 1:54 - 1:55
    За пределами этой области,
  • 1:55 - 1:59
    когда вы обращаетесь к quantity,
    вы вызываете глобальную переменную.
  • 1:59 - 2:00
    Если подумать,
  • 2:00 - 2:03
    это совсем нелогично, что при заказе
  • 2:03 - 2:07
    создается новая переменная quantity,
    которая и выводится на экран.
  • 2:07 - 2:10
    На самом деле нужно использовать
    переменную quantity,
  • 2:10 - 2:15
    которая отслеживает увеличение или
    уменьшение числа чашек кофе.
  • 2:15 - 2:18
    И общую стоимость
    нужно рассчитывать, исходя из нее.
  • 2:18 - 2:22
    Чтобы исправить код, нам нужно убрать
    объявление локальной переменной quantity.
  • 2:22 - 2:25
    Вместо нее нужно использовать
    глобальную переменную quantity.
  • 2:25 - 2:29
    Также мы не должны
    обновлять количество на экране.
  • 2:29 - 2:31
    Кнопки "плюс" и "минус"
    уже отвечают за отображение
  • 2:31 - 2:34
    на экране корректного числа.
  • 2:34 - 2:38
    Кнопка submitOrder должна
    по-прежнему обновлять стоимость.
  • 2:38 - 2:42
    Но в этот раз мы рассчитаем
    стоимость как (quantity * 5),
  • 2:42 - 2:44
    используя глобальную переменную.
  • 2:44 - 2:48
    Я исправлю код в соответствии
    с этими замечаниями.
  • 2:48 - 2:51
    Обратите внимание, что переменная quantity
    теперь выделена фиолетовым цветом.
  • 2:51 - 2:54
    Это значит, что мы используем глобальную
    переменную quantity файла MainActivity.
  • 2:54 - 2:58
    Нажатие кнопки
    вызывает метод submitOrder,
  • 2:58 - 3:00
    который выводит на экран стоимость,
  • 3:00 - 3:04
    из расчета: глобальная
    переменная quantity, умноженная на 5.
  • 3:05 - 3:07
    Похоже, все верно.
    Давайте проверим.
  • 3:08 - 3:10
    Итак, решающий тест.
  • 3:10 - 3:13
    Я меняю количество на 6
    и нажимаю на кнопку Order.
  • 3:14 - 3:15
    Ура! Получилось $30.
  • 3:15 - 3:18
    Я попробую и другие значения,
    чтобы убедиться наверняка.
  • 3:18 - 3:19
    Все правильно.
  • 3:19 - 3:23
    И это правильно.
    Отлично! Все работает.
  • 3:23 - 3:24
    Вы исправили свой первый баг.
  • 3:24 - 3:26
    Вы хорошо поработали
    над этим заданием.
  • 3:26 - 3:29
    Функции приложения
    в полном порядке.
  • 3:29 - 3:32
    Но мне кажется,
    интерфейс у него тоскливый.
  • 3:32 - 3:36
    Особенно выбор количества
    стоит сделать посимпатичней.
  • 3:36 - 3:37
    Этим и займемся.
Title:
05-39 Fix the Order Button - Solution
Description:

more » « less
Video Language:
English
Team:
Udacity
Project:
UD837 - Android for Beginners
Duration:
03:39

Russian subtitles

Revisions Compare revisions