เรามาดำเนินการต่อกับที่เก็บข้อมูลกันเถอะ
ฉันจะใช้การโทรนี้
และมีวิธีการมากมายที่นี่
ในอินสแตนซ์ของการเรียก เรามีการเข้าคิวและการดำเนินการ
Enqueue และ execute เป็นสองวิธีที่มีให้โดยอินเตอร์เฟซการเรียกเพื่อส่งคำขอ
Http ไปยังเว็บเซอร์วิสหรือ API
พวกเขาถูกใช้เพื่อเริ่มต้นคำขอและรับการตอบกลับจากเซิร์ฟเวอร์
อย่างไรก็ตาม พวกเขาแตกต่างกันในแง่ของวิธีการจัดการคำขอและการตอบสนอง
ในกรณีของเรา ฉันจะใช้หมึก
หมึกเป็นวิธีการแบบอะซิงโครนัสสำหรับการสร้างคำขอ Http
โดยทั่วไปจะใช้เมื่อคุณต้องการทำการร้องขอเครือข่ายในเธรดพื้นหลังและจัดการการตอบกลับบนเธรด UI
หลัก
ในขณะที่เมธอด execute เป็นเมธอดแบบซิงโครนัสสำหรับการส่งคำขอ Http
มักใช้เมื่อคุณต้องการทำการร้องขอเครือข่ายบนเธรดปัจจุบัน ซึ่งมักไม่แนะนำสำหรับเธรดหลักของ UI ของ
Android เนื่องจากอาจทำให้ UI หยุดทำงานหรือตอบสนองไม่ได้หากการดำเนินการเครือข่ายใช้เวลานาน
ดังนั้นผมขอแนะนำให้คุณใช้ enqueue แทนที่จะใช้ execute ในเธรดหลัก
การเพิ่มคิวจะอยู่ในเธรดพื้นหลังเมื่อคุณเรียกใช้ enqueue
retrofit จะจัดการเธรดให้คุณโดยอัตโนมัติ
เพื่อให้มั่นใจว่าคำขอเครือข่ายจะทำงานในเธรดพื้นหลังและผลลัพธ์จะถูกส่งกลับมายังเธรดหลัก
คุณส่ง callback เป็นอาร์กิวเมนต์ให้กับ enqueue ซึ่งจะเรียกใช้เมื่อคำขอเสร็จสมบูรณ์
ดังนั้นฉันจะส่ง callback ใหม่ และเรามีสองเมธอดสำหรับการตอบสนองและเมื่อเกิดข้อผิดพลาด
เมธอด callback เหล่านี้ใช้เพื่อจัดการกรณีความสำเร็จและความล้มเหลวตามลำดับ
หากการตอบสนองสำเร็จ เราจำเป็นต้องรับอ็อบเจกต์ผลลัพธ์เพื่อให้ result เท่ากับเนื้อหาของ response
และฉันจะเก็บคำตอบนี้ dot body ไว้ภายในวัตถุผลลัพธ์
อีกครั้งครับทุกคน ผมได้รับคำตอบทั้งหมดนี้ในรูปแบบของออบเจ็กต์ผลลัพธ์
และกำลังเก็บมันไว้ในออบเจ็กต์ผลลัพธ์อีกที
ดังนั้นสำหรับกรณีนี้ ฉันจึงได้ผลลัพธ์เป็น equal response dot body method
จากนั้นฉันต้องตรวจสอบว่าผลลัพธ์ไม่เท่ากับค่าว่าง และผลลัพธ์จุดที่ได้ไม่เท่ากับค่าว่าง
จากนั้นฉันจะสร้างการตอบสนองแบบซ้อนกันชื่อ movies ซึ่งเท่ากับ result dot get results
หากเราไปที่คลาสผลลัพธ์ เราจะเห็นเมธอดนี้ get ที่คืนค่าเป็นรายการของภาพยนตร์
และนี่คือสิ่งที่ฉันต้องการ
ผมต้องการรับข้อมูลตอบกลับแบบซ้อนของคลาสข้อมูลอื่น ๆ อีกครั้งนะครับ
แค่แจ้งให้ทราบว่าผลลัพธ์ตรงนี้คืออาร์เรย์ และนี่คือวิธีที่เราจัดการกับอาร์เรย์ใน Json
เรามีอาร์เรย์ของวัตถุจำนวน 20 รายการอยู่ภายในวัตถุของข้อมูลตอบกลับทั้งหมดที่นี่
ฉันต้องแปลงมันเพราะมันเป็นรายการอาร์เรย์ของภาพยนตร์
จากนั้นตัวแปรข้อมูลสดที่เปลี่ยนแปลงได้ที่เราสร้างไว้ก่อนที่ฉันจะเรียกใช้มัน
และใช้ค่าที่ตั้งไว้แล้วและส่งรายการอาร์เรย์ของภาพยนตร์ที่เราสร้างขึ้นจากการตอบสนองนี้และตั้งค่าให้กับค่าชุดข้อมูลสดที่เปลี่ยนแปลงได้นี้
วิธีนี้สามารถเรียกใช้บนเธรดหลักของ UI ได้และจะตั้งค่าใหม่ทันที
หากถูกเรียกจากเธรดพื้นหลัง จะเกิดข้อยกเว้นหลังการส่งค่าเมธอด
วิธีนี้สามารถเรียกได้จากทุกเธรดและตารางเวลา
ค่าใหม่ที่จะกำหนดบนเธรดหลัก
มีประโยชน์เมื่อคุณต้องการอัปเดตข้อมูลสดจากเธรดเบื้องหลัง
ถ้าอย่างนั้นฉันก็ไม่จำเป็นต้องทำอะไรเลยกับความล้มเหลวนั้น
และที่นี่ฉันจำเป็นต้องคืนวัตถุของข้อมูลสดที่เปลี่ยนแปลงได้
เนื่องจากนี่คือเมธอดที่คืนข้อมูลสดที่เปลี่ยนแปลงได้และมันถูกวางไว้ภายในคลังภาพยนตร์นี้