Return to Video

Fix the Order Button - Solution

  • 0:00 - 0:03
    这个问题没有唯一正确答案
  • 0:03 - 0:06
    正确与否取决于它能不能帮你识别出
  • 0:06 - 0:09
    应用的行为是否正确
  • 0:09 - 0:13
    以下是我注意的一些地方
  • 0:13 - 0:16
    在错误的应用行为中 当你点击 ORDER 按钮时
  • 0:16 - 0:20
    quantity 每次都会变成相同的值 但这是不该发生的
  • 0:20 - 0:22
    我还发现对于 quantity 的值来说
  • 0:22 - 0:25
    对应的价格是正确的 但实际上价格应该是
  • 0:25 - 0:28
    对应你最后选择的 quantity 的值
  • 0:28 - 0:32
    再说一次 quantity 只与事实有关 它的值是不能变的
  • 0:32 - 0:34
    我们去代码中看看为什么会发生这种状况
  • 0:35 - 0:39
    在 activity_main.xml 布局文件中 ORDER 按钮是在这里声明的
  • 0:39 - 0:41
    当点击 ORDER 按钮
  • 0:41 - 0:43
    会调用 activity_main.xml 中的 submitOrder 方法
  • 0:43 - 0:48
    在 MainActivity.java 文件中 submitOrder方法在这
  • 0:48 - 0:51
    这段代码我们已经很久没有改变过了
  • 0:51 - 0:55
    我们在里边声明了一个整型变量 并赋初值为5
  • 0:55 - 0:56
    在屏幕上显示出来
  • 0:56 - 1:01
    然后用咖啡杯数乘以5美元显示总价
  • 1:01 - 1:04
    现在这些代码已经没什么意义了 因为我们要提交
  • 1:04 - 1:07
    更新后的 quantity 值
  • 1:07 - 1:09
    另一个问题是 我们创建了一个整型变量
  • 1:09 - 1:12
    而我们已经有了一个全局变量 quantity
  • 1:12 - 1:14
    用来实时保存咖啡的杯数
  • 1:14 - 1:18
    在 MainActivity 类中我们已经有了一个全局变量
  • 1:18 - 1:23
    所以该类内所有方法都可以使用 quantity 变量
  • 1:23 - 1:27
    但是 在 submitOrder 方法中 我们又创建了一个局部 quantity 变量
  • 1:27 - 1:30
    理论上 你可以声明一个和全局变量同名
  • 1:30 - 1:32
    的局部变量
  • 1:32 - 1:35
    这意味着在这个方法中
  • 1:35 - 1:39
    局部变量声明之后 你在引用它时
  • 1:39 - 1:42
    它就会指向值为5的局部变量 quantity
  • 1:42 - 1:44
    而不是值为2的全局变量
  • 1:44 - 1:46
    所以 display(quantity) 和
  • 1:46 - 1:52
    displayPrice(quantity *5) 都会指向局部变量 quantity
  • 1:52 - 1:54
    这是局部变量的作用域
  • 1:54 - 1:55
    在作用域之外
  • 1:55 - 1:59
    当你引用 quantity 时 它就指向全局变量
  • 1:59 - 2:00
    想想看
  • 2:00 - 2:03
    你每次都创建一个新的 quantity 并显示它
  • 2:03 - 2:07
    当你提交订单时你会发现这种行为是没有意义的
  • 2:07 - 2:10
    你真正应该做的是使用
  • 2:10 - 2:15
    实时保存咖啡数的全局变量
  • 2:15 - 2:18
    用全局变量计算咖啡总价
  • 2:18 - 2:22
    为了修复代码我们不应该声明局部变量
  • 2:22 - 2:25
    应该只使用这个全局变量 quantity
  • 2:25 - 2:29
    也不应该在屏幕上更新 quantity
  • 2:29 - 2:31
    +和—按钮会使屏幕更新
  • 2:31 - 2:34
    出正确的 quantity 值
  • 2:34 - 2:38
    我们还希望 submitOrder 按钮为我们更新出总价
  • 2:38 - 2:42
    但现在我们要计算总价 quantity 乘以5作为总价
  • 2:42 - 2:44
    使用全局变量 quantity
  • 2:44 - 2:48
    为了达到刚刚我们提到的效果 我要更新一下代码
  • 2:48 - 2:51
    注意 quantity 变成了紫色
  • 2:51 - 2:54
    这表明我们正在使用 MainActivity 中的全局变量 quantity
  • 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:14
    我们把 quantity 变成6 然后点击 Order 按钮
  • 3:14 - 3:15
    没错 是30美元
  • 3:15 - 3:18
    我们再试试其他数 以防这是一个巧合
  • 3:18 - 3:19
    看起来是正确的 正确的
  • 3:19 - 3:23
    成功了
  • 3:23 - 3:24
    你刚刚修复了你的第一个 bug
  • 3:24 - 3:26
    这项任务你干得不错
  • 3:26 - 3:29
    我们的应用运行正常
  • 3:29 - 3:32
    但我不得不承认 这个 UI 有点丑
  • 3:32 - 3:36
    尤其是选择数量的这个 可以做的更好看一点
  • 3:36 - 3:37
    接下来我们解决这个问题
Title:
Fix the Order Button - Solution
Description:

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

Chinese, Simplified subtitles

Revisions Compare revisions