การใช้การค้นหาเชิงสัมพันธ์ในแอนดรอยด์ด้วย Parse
8 นาที
การค้นหาข้อมูลเชิงสัมพันธ์บน android บทนำ ในคู่มือนี้ คุณจะทำการค้นหาข้อมูลเชิงสัมพันธ์ใน parse และพัฒนาแอป android โดยใช้การค้นหาเหล่านี้ คุณจะได้เรียนรู้วิธีการตั้งค่าและค้นหาข้อมูลที่สมจริงโดยใช้ back4app และ android บทเรียนนี้ใช้แอปที่สร้างขึ้นใน android studio arctic fox 2020 3 1 โดยมี \<font color="#2166ae">compilesdk = 30\</font> , \<font color="#2166ae">minsdk = 23\</font> และ \<font color="#2166ae">targetsdk = 30\</font> ในทุกช่วงเวลา คุณสามารถเข้าถึงโปรเจกต์ android ที่สร้างขึ้นจากบทเรียนนี้ได้ที่ที่เก็บ github ของเรา ที่เก็บตัวอย่าง kotlin https //github com/templates back4app/android parse sdk kotlin ที่เก็บตัวอย่าง java https //github com/templates back4app/android parse sdk java เป้าหมาย เป้าหมายของเราคือการค้นหาข้อมูลที่เก็บไว้บน \<font color="#2166ae">back4app\</font> จากแอป \<font color="#2166ae">android\</font> นี่คือภาพรวมของสิ่งที่เราจะทำให้สำเร็จ ข้อกำหนดเบื้องต้น ในการทำตามบทเรียนนี้ เราต้องการ android studio https //developer android com/studio/index html แอปที่สร้างขึ้นบน back4app หมายเหตุ ติดตาม บทเรียนการสร้าง parse app ใหม่ https //www back4app com/docs/get started/new parse app เพื่อเรียนรู้วิธีการสร้าง parse app บน back4app แอป android ที่เชื่อมต่อกับ back4app หมายเหตุ ติดตาม บทเรียนการติดตั้ง parse sdk https //www back4app com/docs/android/parse android sdk เพื่อสร้างโปรเจกต์ android studio ที่เชื่อมต่อกับ back4app อุปกรณ์ (หรือ อุปกรณ์เสมือน https //developer android com/studio/run/managing avds html ) ที่รัน android 4 1 (jelly bean) หรือใหม่กว่า เริ่มกันเลย! ก่อนที่จะดำเนินการต่อ เราต้องเชื่อมต่อ \<font color="#2166ae">back4app\</font> กับแอปพลิเคชันของเรา คุณควรบันทึก \<font color="#2166ae">appid\</font> และ \<font color="#2166ae">clientkey\</font> จาก \<font color="#2166ae">back4app\</font> ไปยัง \<font color="#2166ae">string xml\</font> ไฟล์และจากนั้นเริ่มต้น \<font color="#2166ae">parse\</font> ใน \<font color="#2166ae">app java\</font> หรือ \<font color="#2166ae">app kt\</font> ไฟล์。 ติดตาม บทเรียนการสร้างแอป parse ใหม่ https //www back4app com/docs/android/parse android sdk หากคุณไม่รู้ว่าจะเริ่มต้น \<font color="#2166ae">parse\</font> ในแอปของคุณอย่างไร หรือคุณสามารถดาวน์โหลดโปรเจกต์ที่เราแชร์ลิงก์ github ข้างต้นและแก้ไขเฉพาะ \<font color="#2166ae">appid\</font> และ \<font color="#2166ae">clientkey\</font> ตามที่คุณต้องการ ในทุกเวลา คุณสามารถเข้าถึงโปรเจกต์ android ที่สร้างขึ้นด้วยบทเรียนนี้ได้ที่ที่เก็บ github ของเรา ที่เก็บตัวอย่าง kotlin https //github com/templates back4app/android parse sdk kotlin ที่เก็บตัวอย่าง java https //github com/templates back4app/android parse sdk java 1 บันทึกข้อมูลบางอย่างบน back4app ในขั้นตอนนี้ เราจะสร้างคลาสด้วย js console และโค้ด javascript ที่จัดเตรียมโดย \<font color="#2166ae">parse\</font> และเราจะสร้างคำถามสำหรับคลาสนี้ เรามาสร้างคลาสที่หลากหลาย ซึ่งจะเป็นเป้าหมายของคำถามในคู่มือนี้ คลาสที่เราจะสร้างคือ \<font color="#2166ae">author\</font> , \<font color="#2166ae">book\</font> , \<font color="#2166ae">publisher\</font> และ \<font color="#2166ae">bookstore\</font> , ซึ่ง \<font color="#2166ae">book\</font> มีความสัมพันธ์แบบ 1\ n กับ \<font color="#2166ae">publisher\</font> และ n\ n กับ \<font color="#2166ae">author\</font> , และ \<font color="#2166ae">bookstore\</font> มีความสัมพันธ์แบบ n\ n กับ \<font color="#2166ae">book\</font> ใน parse js console สามารถรันโค้ด javascript ได้โดยตรง โดยการสอบถามและอัปเดตเนื้อหาฐานข้อมูลแอปพลิเคชันของคุณโดยใช้คำสั่ง js sdk รันโค้ดด้านล่างจาก js console ของคุณและแทรกข้อมูลลงใน back4app นี่คือรูปลักษณ์ของ js console ในแดชบอร์ดของคุณ ไปข้างหน้าและสร้างคลาสด้วยเนื้อหาตัวอย่างต่อไปนี้ 1 // add objects and create tables 2 // authors 3 const authora = new parse object('author'); 4 authora set('name', 'aaron writer'); 5 await authora save(); 6 7 const authorb = new parse object('author'); 8 authorb set('name', 'beatrice novelist'); 9 await authorb save(); 10 11 const authorc = new parse object('author'); 12 authorc set('name', 'casey columnist'); 13 await authorc save(); 14 15 // publishers 16 const publishera = new parse object('publisher'); 17 publishera set('name', 'acacia publishings'); 18 await publishera save(); 19 20 const publisherb = new parse object('publisher'); 21 publisherb set('name', 'birch distributions'); 22 await publisherb save(); 23 24 // books 25 const booka = new parse object('book'); 26 booka set('title', 'a love story'); 27 booka set('publisher', publishera); 28 booka set('publishingdate', new date('05/07/1998')); 29 const bookarelation = booka relation("authors"); 30 bookarelation add(authora); 31 await booka save(); 32 33 const bookb = new parse object('book'); 34 bookb set('title', 'benevolent elves'); 35 bookb set('publisher', publisherb); 36 bookb set('publishingdate', new date('11/31/2008')); 37 const bookbrelation = bookb relation("authors"); 38 bookbrelation add(authorb); 39 await bookb save(); 40 41 const bookc = new parse object('book'); 42 bookc set('title', 'can you believe it?'); 43 bookc set('publisher', publisherb); 44 bookc set('publishingdate', new date('08/21/2018')); 45 const bookcrelation = bookc relation("authors"); 46 bookcrelation add(authora); 47 bookcrelation add(authorc); 48 await bookc save(); 49 50 // bookstore 51 const bookstorea = new parse object('bookstore'); 52 bookstorea set('name', 'books of love'); 53 const bookstorearelation = bookstorea relation("books"); 54 bookstorearelation add(booka); 55 await bookstorea save(); 56 57 const bookstoreb = new parse object('bookstore'); 58 bookstoreb set('name', 'fantasy books'); 59 const bookstorebrelation = bookstoreb relation("books"); 60 bookstorebrelation add(bookb); 61 await bookstoreb save(); 62 63 const bookstorec = new parse object('bookstore'); 64 bookstorec set('name', 'general books'); 65 const bookstorecrelation = bookstorec relation("books"); 66 bookstorecrelation add(booka); 67 bookstorecrelation add(bookc); 68 await bookstorec save(); 69 70 console log('success'); 2 สืบค้นข้อมูลจากแอป android ตอนนี้ที่คุณได้กรอกข้อมูลในคลาสทั้งหมดแล้ว เราสามารถทำการสืบค้นเชิงสัมพันธ์ในนั้นได้ มาลองเริ่มต้นด้วยการกรอง \<font color="#2166ae">หนังสือ\</font> ผลลัพธ์ตามผู้จัดพิมพ์ โดยค้นหาผลลัพธ์ที่เป็นของ \<font color="#2166ae">ผู้จัดพิมพ์\</font> “acacia publishings” (หรือ “publisher a”) โดยใช้ \<font color="#2166ae">parsequery equalto\</font> วิธีการ 1 progressdialog show(); 2 parsequery\<parseobject> publisherquery = new parsequery<>("publisher"); 3 publisherquery whereequalto("name", "acacia publishings"); 4 try { 5 parseobject publisher = publisherquery getfirst(); 6 parsequery\<parseobject> bookquery = new parsequery\<parseobject>("book"); 7 bookquery whereequalto("publisher", publisher); 8 bookquery findinbackground((objects, e) > { 9 progressdialog hide(); 10 if (e == null) { 11 initdata(objects); 12 } else { 13 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 14 } 15 }); 16 } catch (parseexception e) { 17 progressdialog hide(); 18 e printstacktrace(); 19 }1 progressdialog? show() 2 val publisherquery = parsequery\<parseobject>("publisher") 3 publisherquery whereequalto("name", "acacia publishings") 4 try { 5 val publisher = publisherquery first 6 val bookquery = parsequery\<parseobject>("book") 7 bookquery whereequalto("publisher", publisher) 8 bookquery findinbackground { objects list\<parseobject>?, e parseexception? > 9 progressdialog? hide() 10 if (e == null) { 11 initdata(objects!!) 12 } else { 13 toast maketext(this, e localizedmessage, toast length short) show() 14 } 15 } 16 } catch (e parseexception) { 17 progressdialog? hide() 18 e printstacktrace() 19 } ตอนนี้เรามาค้นหาว่า \<font color="#2166ae">bookstore\</font> วัตถุใดบ้างที่มี \<font color="#2166ae">book\</font> วัตถุที่มีวันที่เผยแพร่มากกว่า 01/01/2010 โดยใช้การค้นหาภายในด้วย \<font color="#2166ae">parsequery wheregreaterthan\</font> วิธีการและจากนั้น \<font color="#2166ae">parsequery wherematchesquery\</font> วิธีการ 1 progressdialog show(); 2 parsequery\<parseobject> bookquery = new parsequery<>("book"); 3 4 calendar calendar = calendar getinstance(); 5 calendar set(2010,1,1,59,59,59); 6 date date = calendar gettime(); 7 8 bookquery wheregreaterthan("publishingdate", date); 9 10 parsequery\<parseobject> bookstorequery = new parsequery<>("bookstore"); 11 bookstorequery wherematchesquery("books",bookquery); 12 bookstorequery findinbackground((objects, e) > { 13 progressdialog hide(); 14 if (e==null){ 15 initdata(objects); 16 } else { 17 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 18 } 19 });1 progressdialog? show() 2 val bookquery = parsequery\<parseobject>("book") 3 val calendar = calendar getinstance() 4 calendar\[2010, 1, 1, 59, 59] = 59 5 val date = calendar time 6 bookquery wheregreaterthan("publishingdate", date) 7 val bookstorequery = parsequery\<parseobject>("bookstore") 8 bookstorequery wherematchesquery("books", bookquery) 9 bookstorequery findinbackground { objects list\<parseobject>?, e parseexception? > 10 progressdialog? hide() 11 if (e == null) { 12 initdata(objects!!) 13 } else { 14 toast maketext(this, e localizedmessage, toast length short) show() 15 } 16 } ตอนนี้เรามาสร้างคำค้นหาที่ซับซ้อนมากขึ้น โดยมองหาวัตถุ \<font color="#2166ae">bookstore\</font> ที่มีอย่างน้อยหนึ่ง \<font color="#2166ae">book\</font> ที่เขียนโดย \<font color="#2166ae">author\</font> “aaron writer” (หรือ “authora”) โดยใช้ \<font color="#2166ae">whereequalto\</font> และ \<font color="#2166ae">wherematchesquery\</font> 1 progressdialog show(); 2 parsequery\<parseobject> authorquery = new parsequery<>("author"); 3 authorquery whereequalto("name","aaron writer"); 4 try { 5 parseobject authora = authorquery getfirst(); 6 parsequery\<parseobject> bookquery = new parsequery<>("book"); 7 bookquery whereequalto("authors",authora); 8 9 parsequery\<parseobject> bookstorequery = new parsequery<>("bookstore"); 10 bookstorequery wherematchesquery("books",bookquery); 11 12 bookstorequery findinbackground((objects, e) > { 13 progressdialog hide(); 14 if (e==null){ 15 initdata(objects); 16 } else { 17 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 18 } 19 }); 20 21 22 } catch (parseexception e) { 23 progressdialog hide(); 24 e printstacktrace(); 25 }1 progressdialog? show() 2 val authorquery = parsequery\<parseobject>("author") 3 authorquery whereequalto("name", "aaron writer") 4 try { 5 val authora = authorquery first 6 val bookquery = parsequery\<parseobject>("book") 7 bookquery whereequalto("authors", authora) 8 val bookstorequery = parsequery\<parseobject>("bookstore") 9 bookstorequery wherematchesquery("books", bookquery) 10 bookstorequery findinbackground { objects list\<parseobject>?, e parseexception? > 11 progressdialog? hide() 12 if (e == null) { 13 initdata(objects!!) 14 } else { 15 toast maketext(this, e localizedmessage, toast length short) show() 16 } 17 } 18 } catch (e parseexception) { 19 progressdialog? hide() 20 e printstacktrace() 21 } เสร็จแล้ว! ในตอนท้ายของคู่มือนี้ คุณได้เรียนรู้ว่าการค้นหาความสัมพันธ์ทำงานอย่างไรใน parse และวิธีการดำเนินการเหล่านี้ใน back4app จากแอป android