WEBVTT

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

2
00:01.100 --> 00:05.700

เราประสบความสำเร็จในการสร้างและเพิ่มการปรับปรุงใหม่ให้กับแอปพลิเคชันของเรา

3
00:05.720 --> 00:11.960
ตอนนี้เรามาต่อที่ขั้นตอนถัดไป
ซึ่งคือการแสดงข้อมูลในหน้า UI ของแอป

4
00:11.990 --> 00:17.960
แอปนี้จะใช้โมเดลสถาปัตยกรรม Mvvm แบบ model
view ViewModel

5
00:17.990 --> 00:21.110
เราเสร็จสิ้นส่วนของแหล่งข้อมูลระยะไกลแล้ว

6
00:21.110 --> 00:29.390
ตอนนี้เรามาที่ที่เก็บข้อมูลกัน
ที่เก็บข้อมูลจะรวมอยู่ในส่วนของโมเดลหรือเลเยอร์

7
00:29.390 --> 00:38.630
ภายในแพ็กเกจโมเดลนี้ ผมจะสร้างคลาส Java
ใหม่ขึ้นมา และจะตั้งชื่อว่า movie
repository

8
00:38.690 --> 00:45.950
ใน Mvvm model View ViewModel Architectural

9
00:45.950 --> 00:52.490
Pattern ใน Android repository
เป็นรูปแบบการออกแบบที่ทำหน้าที่เป็นสะพานเชื่อมระหว่าง
view

10
00:52.490 --> 00:55.590
model ซึ่งเป็นชั้นการนำเสนอ กับแหล่งข้อมูล
เช่น API
เครือข่ายหรือฐานข้อมูลภายในเครื่อง

11
00:55.610 --> 01:03.540

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

12
01:03.540 --> 01:05.340
ViewModel ในการดึงและจัดการข้อมูล

13
01:05.370 --> 01:12.180
ระบบเก็บข้อมูล (Repository)
จะทำการสรุปข้อมูลจากแหล่งข้อมูลต่าง ๆ

14
01:12.180 --> 01:19.890
ซึ่งอาจรวมถึงข้อมูลระยะไกลจากบริการเว็บ
เช่น แอปพลิเคชันของเรา
หรือข้อมูลท้องถิ่นจากฐานข้อมูลที่เราได้ทำไว้ในแอปก่อนหน้าโดยใช้ฐานข้อมูลห้อง

15
01:19.890 --> 01:22.980
(room database) หรือกลไกการดึงข้อมูลอื่น ๆ

16
01:22.980 --> 01:29.820
มันป้องกัน ViewModel
จากความซับซ้อนของการโต้ตอบโดยตรงกับแหล่งข้อมูลเหล่านี้

17
01:29.850 --> 01:37.380

ระบบจัดเก็บข้อมูลช่วยบังคับใช้หลักการแหล่งข้อมูลเดียว
(Single Source

18
01:37.380 --> 01:42.360
of Truth)
ซึ่งหมายความว่าควรมีเพียงที่เดียวในแอปพลิเคชันของคุณที่รับผิดชอบในการจัดการและจัดเก็บข้อมูล

19
01:42.390 --> 01:50.690

ซึ่งช่วยลดความเสี่ยงของความไม่สอดคล้องหรือข้อผิดพลาดที่อาจเกิดขึ้นจากการมีแหล่งข้อมูลหลายแหล่ง

20
01:50.700 --> 01:55.050

ฉันต้องการดึงข้อมูลและจัดเก็บไว้ในรายการอาร์เรย์ของภาพยนตร์

21
01:55.050 --> 01:57.990
ดังนั้นฉันจะเริ่มด้วยอาร์เรย์ส่วนตัว

22
01:57.990 --> 02:00.900
รายชื่อนักแสดงภาพยนตร์

23
02:00.900 --> 02:05.880
ฉันจะกด Enter เพื่อนำเข้าและจะตั้งชื่อว่า
movies เท่ากับรายการอาร์เรย์ใหม่

24
02:05.880 --> 02:14.790

และฉันจำเป็นต้องสร้างข้อมูลสดที่สามารถเปลี่ยนแปลงได้
เพราะฉันจะใช้ข้อมูลสดใน ViewModel

25
02:14.790 --> 02:16.830
เพื่อดึงข้อมูลและแสดงผลใน UI

26
02:16.860 --> 02:22.440

และข้อมูลสดที่เปลี่ยนแปลงได้นี้เป็นประเภทรายการของคลาสภาพยนตร์

27
02:22.440 --> 02:27.030

ฉันจะเรียกมันว่าข้อมูลสดที่เปลี่ยนแปลงได้ซึ่งเทียบเท่ากับข้อมูลสดที่เปลี่ยนแปลงได้ใหม่

28
02:27.030 --> 02:33.110

กรุณาอ้างอิงบทเรียนข้อมูลสดในส่วนก่อนหน้าเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับข้อมูลสด

29
02:33.120 --> 02:41.160

ข้อมูลสดถูกใช้เพื่อเก็บรักษาและสังเกตการเปลี่ยนแปลงของข้อมูลในลักษณะที่ตระหนักถึงวงจรชีวิตภายในแอปพลิเคชัน

30
02:41.160 --> 02:48.930
ใน Android ข้อมูลแบบเปลี่ยนแปลงได้
(Mutable live

31
02:48.930 --> 02:51.000
data) เป็นการขยายของคลาสข้อมูลแบบสด (live
data)
และเพิ่มความสามารถในการแก้ไขหรือกำหนดข้อมูลที่บรรจุอยู่ภายใน

32
02:51.000 --> 02:54.210

ดังนั้นสิ่งนี้จึงเรียกว่าข้อมูลสดที่เปลี่ยนแปลงได้

33
02:54.210 --> 03:02.670

การไม่มีความสามารถในการแก้ไขข้อมูลที่เปลี่ยนแปลงได้ซึ่งทำงานอยู่
มีศักยภาพในการเพิ่มหรือแก้ไขข้อมูลที่บรรจุอยู่ภายใน

34
03:02.670 --> 03:10.320

ข้อมูลสดที่เปลี่ยนแปลงได้ช่วยให้มั่นใจได้ว่าการเปลี่ยนแปลงข้อมูลจะสังเกตเห็นได้เฉพาะเมื่อคอมโพเนนต์อยู่ในสถานะที่ใช้งานอยู่หรือเริ่มต้นใหม่เท่านั้น
ซึ่งช่วยป้องกันการรั่วไหลของหน่วยความจำและการอัปเดต

35
03:10.320 --> 03:18.060
UI ที่ไม่จำเป็น

36
03:18.060 --> 03:25.710

และต่างจากข้อมูลสดปกติที่อ่านได้เพียงครั้งเดียวเมื่อมีการตั้งค่า

37
03:25.710 --> 03:30.690

ข้อมูลสดที่เปลี่ยนแปลงได้จะอนุญาตให้คุณแก้ไขข้อมูลที่เก็บไว้ผ่านวิธีการตั้งค่าค่าและค่าที่โพสต์

38
03:30.870 --> 03:39.240

จากนั้นฉันจำเป็นต้องสร้างอินสแตนซ์แอปพลิเคชันส่วนตัวหรือแอปพลิเคชันบริบทเพื่อใช้มันในการรับบริบท
เพราะฉันต้องส่งมันไปยังภาพยนตร์ยอดนิยมที่นี่ใน

39
03:39.240 --> 03:46.500
API ของบริการ

40
03:48.080 --> 03:53.570

และเพราะฉันจำเป็นต้องเข้าถึงทรัพยากรที่ฉันจะเพิ่มที่นี่ในภายหลัง

41
03:53.570 --> 03:55.310
ไม่ต้องกังวล ฉันจะแสดงให้พวกคุณดูเอง

42
03:55.340 --> 03:57.500
กด Alt พร้อม Enter เพื่อนำเข้าแอปพลิเคชัน

43
03:57.500 --> 04:02.810

ตอนนี้ฉันต้องสร้างคอนสตรัคเตอร์ที่มีเพียงแอปพลิเคชันอีกครั้ง

44
04:02.810 --> 04:10.400
ทุกคน
ผมกำลังส่งต่อและสร้างคำสั่งแอปพลิเคชันนี้เพื่อเข้าถึงโฟลเดอร์ทรัพยากรในภายหลัง
เพราะผมจะวาง API ของ string
ไว้ที่นี่ภายในแท็ก

45
04:10.400 --> 04:17.780
resources ในไฟล์ XML ของ string dot

46
04:17.810 --> 04:27.770
อีกครั้ง ฉันจะสร้างเมธอดสาธารณะที่เรียกว่า
Get Mutable

47
04:27.770 --> 04:29.240
Live data
และประเภทการคืนค่าควรเป็นข้อมูลสดที่แก้ไขได้

48
04:29.240 --> 04:32.810

และนี่คือเมธอดเก็ทเตอร์สำหรับข้อมูลสดที่เปลี่ยนแปลงได้นี้

49
04:32.810 --> 04:38.000

คุณสามารถสร้างมันได้โดยใช้ตัวรับและตัวตั้งหรือเหมือนกับรายการ
move นี้

50
04:38.070 --> 04:44.150
โอเค ดังนั้นวิธีนี้จะคืนค่านี้
และนี่คือเมธอด getter สำหรับสิ่งนี้

51
04:44.150 --> 04:48.570

ฉันต้องการให้คุณตั้งใจอยู่กับฉันเพราะมันเป็นวิธีที่สำคัญมาก

52
04:48.570 --> 04:51.510
ฉันจะเริ่มด้วยบริการ API สำหรับภาพยนตร์

53
04:51.510 --> 04:59.250
บริการ API
ของภาพยนตร์ที่เทียบเท่ากับอินสแตนซ์
retrofit dot get service

54
04:59.250 --> 05:05.640
ในบริบทของการพัฒนาแอปพลิเคชัน Android และ
retrofit คุณมักจะสร้างอินสแตนซ์ retrofit
และใช้มันเพื่อสร้างอินสแตนซ์ของบริการ

55
05:05.640 --> 05:13.530

อินสแตนซ์ของบริการเหล่านี้เป็นอินเทอร์เฟซที่กำหนดจุดสิ้นสุดของ
API และวิธีการ Http ที่เกี่ยวข้อง

56
05:13.530 --> 05:14.370
ได้แก่ get และ post

57
05:14.370 --> 05:18.900
และในกรณีของเรา เราได้สร้างและกำหนดเมธอด
get เพียงหนึ่งเมธอดเท่านั้น

58
05:18.900 --> 05:24.270

จากนั้นคุณใช้ตัวอย่างของอินเทอร์เฟซบริการเพื่อทำการร้องขอ
API

59
05:24.270 --> 05:30.900
จากนั้นฉันจะเริ่มโดยการใช้คลาส call
อีกครั้งและฉันต้องส่งผ่านผลลัพธ์

60
05:30.900 --> 05:39.390

และเราได้พูดคุยเกี่ยวกับการโทรในวิดีโอคอลก่อนหน้านี้
ฉันเรียกมันว่าการโทรเท่ากับบริการ API
ของภาพยนตร์ dot get

61
05:39.390 --> 05:44.580
movies ที่นิยม alt plus enter
เพื่อนำเข้าคลาสของการโทร

62
05:44.580 --> 05:48.180
และที่นี่ฉันต้องการรับภาพยนตร์ยอดนิยม

63
05:48.180 --> 05:51.870
ฉันต้องส่งสตริงที่มีคีย์ API

64
05:51.870 --> 05:59.910
ดังนั้นสำหรับสิ่งนั้น
ฉันจะสร้างสตริงที่นี่และจะตั้งชื่อว่า API
underscore key และค่าของมัน

65
05:59.940 --> 06:03.300
คีย์ API ของฉันที่ฉันเก็บไว้ในสมุดบันทึก

66
06:03.330 --> 06:12.060

ฉันส่งผ่านวัตถุการสมัครที่นี่ในคอนสตรัคเตอร์เพื่อใช้และเข้าถึงไฟล์
dot

67
06:12.060 --> 06:15.330
XML ของสตริงในโฟลเดอร์ทรัพยากร

68
06:15.330 --> 06:22.620
ดังนั้นฉันจำเป็นต้องนำสิ่งนี้มา
และฉันขอแนะนำให้เก็บสตริงทั้งหมดไว้ที่นี่ภายในไฟล์
Strings.xml

69
06:22.650 --> 06:29.940
คุณสามารถข้ามและละเว้นการสมัครนี้ได้
และคุณสามารถกำหนด API
ที่คุณสามารถใช้ได้ที่นี่เช่นนี้

70
06:29.940 --> 06:30.570
นี่

71
06:30.570 --> 06:36.030
ฉันจะเริ่มที่ application dot, จากนั้น get
application context dot get string.

72
06:36.030 --> 06:46.530
และที่นี่ฉันต้องพิมพ์ r dot string dot api
alt

73
06:46.530 --> 06:48.300
แล้วกด enter เพื่อนำเข้าคลาส r
และคุณจะเห็นว่าฉันกำลังเข้าถึงไฟล์ทรัพยากร
string

74
06:48.300 --> 06:52.110

เนื่องจากฉันได้ใช้แอปพลิเคชันและได้รับแอปพลิเคชันอีกครั้ง

75
06:52.110 --> 06:57.870
ทุกคน คุณสามารถลบแอปพลิเคชันนี้และส่งคีย์
API ได้โดยตรงที่นี่

76
06:57.870 --> 06:59.940
แต่ฉันไม่ชอบแบบนี้


