WEBVTT

1
00:00.230 --> 00:01.160
ยินดีต้อนรับกลับมา

2
00:01.160 --> 00:03.620
ตอนนี้เรามาเริ่มกิจกรรมหลักกันเถอะ

3
00:03.620 --> 00:13.040

และที่นี่ฉันจะสร้างวัตถุการผูกหลักของกิจกรรมที่เรียกว่า
binding และวัตถุ

4
00:13.040 --> 00:14.300
ViewModel ของแบบทดสอบและรายการคำถาม

5
00:14.300 --> 00:16.670
ฉันตั้งชื่อว่า รายการคำถาม

6
00:16.670 --> 00:25.100
จากนั้นฉันจะสร้างตัวแปรคงที่ชื่อ result
และ total questions
เพื่อเก็บผลลัพธ์ในตัวแปรเหล่านี้ โดยให้

7
00:25.100 --> 00:35.780
static และ result มีค่าเท่ากับศูนย์ และ
static ใน

8
00:35.780 --> 00:36.290
total questions มีค่าเท่ากับศูนย์ และ I
มีค่าเท่ากับศูนย์

9
00:36.320 --> 00:38.990
ไปที่เมธอด Oncreate

10
00:38.990 --> 00:41.060
เริ่มต้นตัวแปรเหล่านี้

11
00:41.060 --> 00:44.000
ที่นี่ฉันกำลังใช้เครื่องมือการผูกข้อมูล

12
00:48.160 --> 00:50.590
นี่คือการตั้งค่าการผูกข้อมูล

13
00:50.590 --> 00:53.930
ผลลัพธ์เท่ากับศูนย์

14
00:53.950 --> 00:59.290

นี่ฉันกำลังรีเซ็ตคะแนนและจำนวนคำถามทั้งหมดเป็นศูนย์

15
00:59.320 --> 01:04.210

ตอนนี้เราต้องสร้างอินสแตนซ์ของโมเดลมุมมองแบบทดสอบ

16
01:04.240 --> 01:06.190
ฉันจะเริ่มด้วยโมเดลมุมมองแบบทดสอบ

17
01:06.190 --> 01:11.290
วัตถุเท่ากับผู้ให้บริการโมเดลมุมมองใหม่

18
01:11.290 --> 01:14.710
และผ่านจุดนี้ไป

19
01:14.740 --> 01:16.840
มุมมองแบบจำลองคืออะไร

20
01:16.840 --> 01:18.670
นี่คือโมเดลมุมมองแบบควิซ

21
01:18.670 --> 01:23.220

ดังนั้นที่นี่ฉันจำเป็นต้องระบุคลาสของโมเดลมุมมอง

22
01:23.230 --> 01:29.290

นี่เป็นวิธีทั่วไปในการรับอินสแตนซ์ของวิวโมเดลในกิจกรรมหรือแฟรกเมนต์

23
01:29.290 --> 01:32.800

มาแยกย่อยเพื่อทำความเข้าใจโมเดลมุมมองแบบทดสอบกัน

24
01:32.800 --> 01:39.610

นี่คือตัวแปรที่เก็บอินสแตนซ์ของโมเดลมุมมองแบบทดสอบ,
ผู้ให้บริการโมเดลมุมมองใหม่
และการส่งผ่านสิ่งนี้ซึ่งเป็นเจ้าของ

25
01:39.610 --> 01:45.970

ซึ่งเป็นคลาสที่จัดเตรียมโดยส่วนประกอบสถาปัตยกรรมโมเดลมุมมองของ
Android

26
01:45.970 --> 01:49.600

ใช้เพื่อสร้างและจัดการอินสแตนซ์ของโมเดลมุมมอง

27
01:49.600 --> 01:56.470

เมื่อคุณสร้างอินสแตนซ์ของผู้ให้บริการโมเดลมุมมอง
คุณมักจะส่งกิจกรรมหรือแฟรกเมนต์เป็นพารามิเตอร์

28
01:56.470 --> 02:01.330

และนี่จะหมายถึงกิจกรรมหรือแฟรกเมนต์ปัจจุบัน

29
02:01.330 --> 02:06.510
และเนื่องจากเรากำลังทำงานกับกิจกรรมหลัก
ดังนั้นสิ่งนี้จึงหมายถึงกิจกรรมหลัก

30
02:06.520 --> 02:11.920
Get
เรียกคืนอินสแตนซ์ของคลาสโมเดลมุมมองแบบทดสอบ

31
02:11.920 --> 02:19.630

ผู้ให้บริการโมเดลมุมมองมีหน้าที่รับผิดชอบในการรับรองว่าคุณจะได้รับอินสแตนซ์โมเดลมุมมองเดียวกันที่เชื่อมโยงกับกิจกรรมหรือแฟรกเมนต์เดียวกันตลอดการเปลี่ยนแปลงการกำหนดค่า

32
02:19.630 --> 02:24.100


33
02:24.100 --> 02:24.700
ตัวอย่าง

34
02:24.700 --> 02:25.780
การหมุนหน้าจอ

35
02:25.780 --> 02:33.250

วัตถุประสงค์ของโค้ดนี้คือการสร้างหรือดึงอินสแตนซ์ของโมเดลมุมมองแบบทดสอบ

36
02:33.250 --> 02:38.770

ซึ่งช่วยให้คุณสามารถทำงานกับข้อมูลที่เกี่ยวข้องกับฟีเจอร์แบบทดสอบของคุณได้อย่างตระหนักถึงวงจรชีวิต

37
02:38.770 --> 02:40.630
ฉันต้องการให้คุณมีสมาธิในตอนนี้

38
02:40.630 --> 02:48.220
เมื่อแอปเปิดขึ้น
เราจำเป็นต้องแสดงคำถามแรกก่อน
จากนั้นจึงโหลดคำถามอื่น ๆ

39
02:48.220 --> 02:50.860
เมื่อผู้ใช้คลิกที่ปุ่มถัดไป

40
02:50.860 --> 02:56.800
ดังนั้น สำหรับเรื่องนี้
เราจำเป็นต้องแสดงสองสิ่ง คือ คำถามแรก
และคำถามต่อไป

41
02:56.800 --> 03:01.720
ดังนั้นเพื่อจุดประสงค์นั้น
ฉันจะสร้างเมธอดที่นี่เพื่อแสดงคำถามแรก

42
03:01.720 --> 03:03.340
มันเรียกว่าการแสดงผล

43
03:03.370 --> 03:13.000
คำถามแรก ผมจะเริ่มด้วยแบบทดสอบ view model
dot get question list live data ผมเรียก

44
03:13.000 --> 03:17.170
view model นี้ว่า และเรียก method นี้ว่า
get question list live data

45
03:17.170 --> 03:20.680
เพราะฉันจะสังเกตคำถามแรก

46
03:20.680 --> 03:24.850
ในกรณีนี้
ฉันกำลังสังเกตข้อมูลสดจากโมเดลมุมมอง

47
03:24.850 --> 03:28.780
และที่นี่ฉันจะใช้เมธอด dot observe

48
03:28.780 --> 03:35.530
ฉันจะส่งสิ่งนี้เป็นพารามิเตอร์แรก
ซึ่งเป็นเจ้าของและเจ้าของกิจกรรมนี้

49
03:35.530 --> 03:40.240
และผู้สังเกตการณ์ใหม่
และฉันกำลังแทนที่เมธอดที่เปลี่ยนแปลงแล้ว

50
03:40.270 --> 03:45.490

วิธีการสังเกตแบบจุดถูกใช้เพื่อสังเกตการเปลี่ยนแปลงในข้อมูลสด

51
03:45.520 --> 03:46.990
ข้อโต้แย้งแรก

52
03:46.990 --> 03:54.280
นี่แสดงถึงเจ้าของวงจรชีวิต
ซึ่งโดยทั่วไปจะเป็นกิจกรรมหรือส่วนย่อย

53
03:54.280 --> 03:54.970
และในกรณีนี้คือกิจกรรมหลัก

54
03:54.970 --> 04:03.730

อาร์กิวเมนต์ที่สองคือผู้สังเกตการณ์ใหม่ที่กำหนดว่าจะทำอย่างไรเมื่อข้อมูลภายในข้อมูลสดเปลี่ยนแปลงโดยไม่เปลี่ยนแปลง

55
04:03.760 --> 04:04.720


56
04:04.720 --> 04:05.530
วิธีการ

57
04:05.530 --> 04:09.040

วิธีนี้เป็นส่วนหนึ่งของอินเตอร์เฟซผู้สังเกตการณ์

58
04:09.040 --> 04:15.940

มันถูกเรียกเมื่อข้อมูลภายในข้อมูลสดมีการเปลี่ยนแปลงในโค้ดนี้โดยเฉพาะ

59
04:15.940 --> 04:18.190

โดยจะรับออบเจ็กต์รายการคำถามเป็นอาร์กิวเมนต์

60
04:18.190 --> 04:25.030
เมื่อข้อมูลเปลี่ยนแปลง
เราจำเป็นต้องดึงข้อมูลใหม่จากตัวแปรรายการคำถามนี้

61
04:25.030 --> 04:32.950

ดังนั้นสิ่งแรกที่ฉันต้องทำคือกำหนดรายการคำถามที่ฉันสร้างไว้ที่นี่ให้เท่ากับคำถามที่ถูกส่งมาสำหรับข้อมูลที่อัปเดต

62
04:32.950 --> 04:35.230


63
04:35.230 --> 04:38.200
นี่คือข้อมูลที่อัปเดตใหม่

64
04:38.200 --> 04:42.610

ดังนั้นฉันจำเป็นต้องอัปเดตคำถามในรายการด้วยข้อมูลใหม่เหล่านี้

65
04:42.610 --> 04:48.160

จากนั้นฉันจะใช้การผูกข้อมูลเพื่ออัปเดตมุมมองข้อความที่สัมพันธ์กัน

66
04:48.160 --> 04:50.650
และอีกอันสำหรับปุ่มตัวเลือกแบบวิทยุ

67
04:50.650 --> 04:55.390
ดังนั้นสำหรับเรื่องนี้
ฉันจะใช้คำถามแบบจุดข้อความผูกมัด

68
04:55.390 --> 04:59.470
นี่คือวิธีที่เราเข้าถึงมุมมองภายใน binding

69
04:59.500 --> 05:03.580
คำถามในข้อความนี้อ้างถึงมุมมองข้อความนี้

70
05:03.610 --> 05:07.600
คุณสามารถเห็นได้ว่านี่คือข้อความจุด ID

71
05:07.600 --> 05:14.920

และที่นี่ฉันต้องดึงคำถามหมายเลขหนึ่งซึ่งอยู่ที่ดัชนีศูนย์

72
05:14.920 --> 05:21.730

ดังนั้นนี่คือวิธีที่เราจะได้รับคำถามจากรายการคำถามจากรายการอาร์เรย์
รับคำถามได้เรียบร้อย

73
05:21.730 --> 05:23.350
นี่คือคำถามแรก

74
05:23.350 --> 05:26.830
ตอนนี้เราต้องตั้งค่าตัวเลือกทั้งสี่

75
05:26.830 --> 05:38.140
ดังนั้นในลักษณะเดียวกัน
ให้ผูกจุดวิทยุหนึ่งจุดตั้งค่าข้อความเป็นคำถาม

76
05:38.140 --> 05:38.470
จุดที่ดัชนีศูนย์ จุดเลือกตัวเลือกหนึ่ง

77
05:38.470 --> 05:43.150

และฉันจะทำเช่นเดียวกันกับปุ่มวิทยุอีกสามปุ่มที่เหลือ

78
05:49.490 --> 05:56.510
บันทึกโปรเจกต์ไว้ก่อน
แล้วผมจะเรียกคำถามแรกนี้ว่า
"คำถามแรกเกี่ยวกับการแสดงผล"
และจะรันแอปพลิเคชันให้

79
05:56.510 --> 05:58.160
และฉันมีข้อผิดพลาดนี้

80
05:58.190 --> 06:01.820
SDK ที่แนะนำสำหรับการคอมไพล์สูงสุดคือ 33

81
06:01.820 --> 06:06.140
ดังนั้นฉันจะไปที่ manifest
ที่นี่คือเป้าหมาย API

82
06:06.170 --> 06:14.690
ฉันเปลี่ยนเป็น 34 ไปที่ Build.gradle
เปลี่ยนเป็น 34 และ compile SDK เป็น 34

83
06:14.690 --> 06:15.050
ซิงค์

84
06:15.050 --> 06:18.200
ตอนนี้ให้รันอีกครั้ง
และนี่คือแอปพลิเคชันของเรา

85
06:18.200 --> 06:20.750
มันไม่ดึงคำถามแรก

86
06:20.750 --> 06:25.310

ดังนั้นฉันจำเป็นต้องรันการสอบเพื่อตรวจสอบว่ามันทำงานได้ดี

87
06:25.310 --> 06:28.430
ดังนั้นฉันจำเป็นต้องเริ่ม Apache MySQL

88
06:28.430 --> 06:32.480
จากนั้นฉันต้องเพิ่มการอนุญาตอินเทอร์เน็ต

89
06:35.380 --> 06:40.240
และฉันคิดว่าเราให้ที่อยู่ IP ผิด

90
06:40.240 --> 06:44.680
ดังนั้นเราย้อนกลับไปที่คำถาม API
หรือตัวอย่าง retrofit

91
06:44.680 --> 06:48.070
ที่นี่ฉันจำเป็นต้องระบุที่อยู่ IP
ที่ถูกต้อง

92
06:48.100 --> 06:55.210

ในวิดีโอถัดไปเราจะเรียนรู้เกี่ยวกับกฎความปลอดภัยของเครือข่าย

93
06:55.210 --> 06:55.900
เนื่องจากเรากำลังทำงานกับโฮสต์ท้องถิ่น


