ยินดีต้อนรับกลับมา
เราทำส่วนของแหล่งข้อมูลระยะไกลเสร็จแล้ว
ตอนนี้เรามาที่คลังเก็บข้อมูลกัน
ฉันจะสร้างแพ็กเกจใหม่ชื่อ repository
และภายในแพ็กเกจนี้ ผมจะสร้างคลาส Java ใหม่
ฉันตั้งชื่อว่า คลังข้อสอบแบบทดสอบ
และคลังข้อมูลมีหน้าที่รับผิดชอบในการโต้ตอบกับอินเทอร์เฟซบริการ API
และจัดการการดึงข้อมูลและการดำเนินการต่างๆ
กรุณาไปที่ส่วนก่อนหน้า, mVVM
พร้อมการปรับปรุงย้อนหลัง เพื่อเรียนรู้อย่างลึกซึ้งเกี่ยวกับแหล่งเก็บข้อมูลเหล่านี้
แต่อย่ากังวลไป ฉันจะดูแลทุกอย่างเอง
ฉันจะเริ่มต้นด้วยการสร้าง Private Questions API และตั้งชื่อว่า question API
นี่คือตัวอย่างที่จะถูกใช้เพื่อโต้ตอบกับวิธีการของบริการ API
จากนั้นฉันจะสร้างคอนสตรัคเตอร์ที่มี API นี้ และฉันจะลบ API
นี้ออกเพราะฉันต้องกำหนด API ใหม่ที่นี่ซึ่งเท่ากับอินสแตนซ์ใหม่ของ retrofit
นี่คือคลาสที่ฉันสร้างขึ้นก่อน dot get instance dot create
ดังนั้นฉันจะใช้เมธอด create ที่นี่ และฉันจะส่งคำถาม API จุดคลาส
โค้ดนี้หมายความว่าอย่างไร
กรณีการติดตั้งเพิ่มเติมใหม่
นี่จะสร้างอินสแตนซ์ของคลาสอินสแตนซ์ retrofit ที่เราสร้างไว้ก่อนหน้านี้ ซึ่งรับผิดชอบในการให้อินสแตนซ์ retrofit
มี URL ฐานที่กำหนดไว้ล่วงหน้าและตัวแปลง Json
ตัวอย่างการปรับปรุงจุดในโรงงาน
การเรียกเมธอดนี้จะรับอินสแตนซ์ retrofit ที่กำหนดค่าไว้โดยคลาสอินสแตนซ์ retrofit
และเมธอด dot create ของคุณ
วิธีนี้สร้างการใช้งานของอินเตอร์เฟซของ API และในกรณีนี้คือ API คำถาม
คำถาม API อินเทอร์เฟซน่าจะมีเมธอดสำหรับการทำคำขอเครือข่ายเพื่อดึงคำถามจากเว็บเซอร์วิส
และนี่คือสิ่งที่เราเคยทำมาก่อนเพื่อดึงคำถามจาก API
อีกวิธีหนึ่งในการสร้างคือประเภท LiveData
คุณยังจำเพื่อนของเรา LiveData ได้ไหม?
เพื่อนเก่าของเรา? ดังนั้น LiveData
ประเภทรายการคำถามจะดึงคำถามจาก API
ในคลังข้อมูล เราได้กำหนดวิธีการที่คล้ายกับอินเทอร์เฟซใน retrofit และในฐานข้อมูลห้อง
และเราได้พูดคุยเกี่ยวกับคลังข้อมูลอย่างละเอียดในส่วนก่อนหน้านี้แล้ว
ดังนั้น กรุณาไปที่ส่วน Retrofit Plus mVVM อีกครั้ง
ตอนนี้ฉันต้องเริ่มต้นด้วยการกำหนด LiveData ที่สามารถเปลี่ยนแปลงได้ของประเภทคำถามรายการ และฉันตั้งชื่อว่า data
เท่ากับ new mutable live data
และข้อมูลที่เปลี่ยนแปลงได้คือคลาสที่จัดเตรียมโดยส่วนประกอบสถาปัตยกรรมของ Android
และมักใช้เพื่อเก็บข้อมูลและสังเกตการเปลี่ยนแปลงของข้อมูล
นอกจากนี้ ฉันขอแนะนำให้คุณกลับไปเรียนบทเรียนข้อมูลสดเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับข้อมูลประเภทนี้
แต่ลองคิดดูสิ
เพียงแค่โครงสร้างข้อมูลที่ใช้สำหรับเก็บและสังเกตการเปลี่ยนแปลงของข้อมูล
และภายในนี้เมื่อได้รับคำถามจาก API ฉันจำเป็นต้องใช้การเรียกประเภทคำถามแบบรายการ และฉันจะตั้งชื่อว่า response เท่ากับ
questions API จุด get questions
และคุณจะเห็นว่าฉันกำลังเรียกเมธอดนี้ซึ่งส่งคืนการเรียกประเภทรายการคำถาม Alt+.
ป้อนเพื่อนำเข้าคลาสจากแพ็กเกจ retrofit
ตอนนี้ฉันต้องการให้คุณมีสมาธิกับฉัน
ฉันจะใช้คำตอบนี้เพื่อรับรายการคำถาม
ตอบสนองด้วยการต่อคิวหรือดำเนินการ
วิธีการใดในสองวิธีนี้ที่ใช้ในการดำเนินการคำขอเครือข่าย
Execute เป็นเมธอดแบบซิงโครนัสที่ใช้ในการส่งคำขอเครือข่ายใน retrofit
เมื่อคุณใช้ execute คำขอเครือข่ายจะถูกดำเนินการบนเธรดปัจจุบัน
ซึ่งมักจะเป็นเธรดหลักของ UI
ซึ่งหมายความว่าคำขอจะบล็อกเธรดปัจจุบันจนกว่าจะเสร็จสมบูรณ์
ควรใช้ด้วยความระมัดระวังใน Android
เนื่องจากการเรียกใช้คำขอเครือข่ายแบบซิงโครนัสบนเธรดหลักอาจทำให้แอปพลิเคชันไม่ตอบสนอง
และเป็นข้อผิดพลาดที่ทำให้ส่วนติดต่อผู้ใช้ค้างระหว่างการเรียกขอ
ไม่จำเป็นต้องมีการเรียกกลับเมื่อใช้วิธี execute เพราะเมธอดนี้จะส่งคืนออบเจ็กต์การตอบสนองโดยตรง
และคุณสามารถเห็นได้ในที่นี้ในเมธอด enqueue
และนี่คือสิ่งที่เราจะใช้และฉัน
ชอบใช้หมึกมากกว่า
หมึกเป็นวิธีการแบบอะซิงโครนัสที่ใช้ในการทำคำขอเครือข่ายใน retrofit
เมื่อคุณใช้หมึก
วิธีการ, คำขอเครือข่ายจะถูกดำเนินการบนเธรดพื้นหลัง และ
retrofit จะจัดการคำขอและการตอบสนองแบบอะซิงโครนัส
มันถูกออกแบบมาเพื่อใช้ในสถานการณ์ที่คุณไม่ต้องการบล็อกเธรดหลักของ UI
ในขณะที่ทำการร้องขอเครือข่าย เนื่องจากการบล็อกเธรดหลักอาจทำให้ส่วนติดต่อผู้ใช้ไม่ตอบสนองและค้างได้
คุณให้ callback เป็นอาร์กิวเมนต์แก่ ink ดังนั้นสำหรับกรณีนี้ฉันจะใช้ callback ใหม่
รายการคำถาม
นอกจากนี้ ฉันสามารถใช้ lambda ได้ แต่ที่นี่เรากำลังเขียนทับสองเมธอดบน response และเมื่อเกิดข้อผิดพลาด
ดังนั้น callback นี้จะมีเมธอดเช่น on response
และ on failure ที่จะถูกเรียกใช้เมื่อคำขอสำเร็จหรือพบข้อผิดพลาดตามลำดับ
ฉันจะเริ่มด้วยรายการคำถาม
รายการคำถามเท่ากับเนื้อหาของคำตอบ
และที่นี่ฉันต้องเพิ่มค่าชุดข้อมูลจุดลงในรายการ
ที่นี่ฉันกำลังบันทึกข้อมูลลงในรายการเพราะข้อมูลเป็นข้อมูลสดที่สามารถเปลี่ยนแปลงได้
โอเค ฉันได้รับเนื้อหาการตอบกลับนี้
ได้รับรายการนี้และจัดเก็บภายในข้อมูลนี้ซึ่งเป็นข้อมูลสดที่ไม่สามารถเปลี่ยนแปลงได้ประเภทรายการคำถาม โดยรับรายการคำถามทั้งหมด
ขั้นตอนสุดท้ายคือการส่งคืนข้อมูลนี้
นี่คือคลังข้อมูลของเรา
ตอนนี้เรามาดูที่เลเยอร์ ViewModel กัน