Android
Data objects
Effektive relationale Abfragen in Android mit Parse
9 min
relationale abfragen auf android einführung in diesem leitfaden werden sie relationale abfragen in parse durchführen und eine android app mit diesen abfragen implementieren sie werden lernen, wie man realistische daten mit back4app und android einrichtet und abfragt dieses tutorial verwendet eine app, die in android studio arctic fox 2020 3 1 erstellt wurde mit compilesdk = 30 compilesdk = 30 , minsdk = 23 minsdk = 23 und targetsdk = 30 targetsdk = 30 zu jeder zeit können sie auf das vollständige android projekt zugreifen, das mit diesem tutorial erstellt wurde, in unseren github repositories kotlin beispiel repository java beispiel repository ziel unser ziel ist es, daten, die auf back4app back4app gespeichert sind, von einer android android app abzufragen hier ist eine vorschau dessen, was wir erreichen werden voraussetzungen um dieses tutorial abzuschließen, benötigen wir android studio eine app, die auf back4app erstellt wurde hinweis befolgen sie das tutorial für neue parse apps , um zu lernen, wie man eine parse app auf back4app erstellt eine android app, die mit back4app verbunden ist hinweis befolgen sie das tutorial zur installation des parse sdk , um ein android studio projekt zu erstellen, das mit back4app verbunden ist ein gerät (oder virtuelles gerät ) mit android 4 1 (jelly bean) oder neuer lass uns anfangen! bevor wir die nächsten schritte unternehmen, müssen wir back4app back4app mit unserer anwendung verbinden sie sollten die appid appid und clientkey clientkey von back4app back4app in die string xml string xml datei einfügen und dann parse parse in unserer app java app java oder app kt app kt datei initialisieren folgen sie dem neuen parse app tutorial wenn sie nicht wissen, wie sie parse parse in ihrer app initialisieren oder sie können die projekte herunterladen, deren github links wir oben geteilt haben, und nur die appid appid und clientkey clientkey teile entsprechend anpassen zu jeder zeit können sie auf das vollständige android projekt zugreifen, das mit diesem tutorial in unseren github repositories erstellt wurde kotlin beispiel repository java beispiel repository 1 speichern sie einige daten auf back4app in diesem schritt werden wir eine klasse mit der js konsole und den bereitgestellten javascript codes von parse parse erstellen und abfragen für diese klasse erstellen lass uns eine auswahl von klassen erstellen, die das ziel unserer abfragen in diesem leitfaden sein werden die klassen sind autor autor , buch buch , verlag verlag und buchhandlung buchhandlung , in der buch buch eine 1\ n beziehung mit verlag verlag und n\ n mit autor autor , und buchhandlung buchhandlung hat eine n\ n beziehung mit buch buch in der parse js konsole ist es möglich, javascript code direkt auszuführen, um den inhalt ihrer anwendungsdatenbank mit den js sdk befehlen abzufragen und zu aktualisieren führen sie den folgenden code in ihrer js konsole aus und fügen sie die daten in back4app ein so sieht die js konsole in ihrem dashboard aus gehen sie voran und erstellen sie die klassen mit dem folgenden beispielinhalt 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 abfragen der daten aus der android app jetzt, da sie alle klassen befüllt haben, können wir einige relationale abfragen durchführen lassen sie uns damit beginnen, die buch buch ergebnisse nach dem verlag zu filtern und nach denjenigen zu suchen, die zu dem verlag verlag „acacia publishings“ (oder „verlag a“) gehören, indem wir die grundlegende parsequery equalto parsequery equalto methode verwenden 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 } lass uns jetzt abfragen, welche bookstore bookstore objekte enthalten book book objekte mit einem veröffentlichungsdatum größer als 01/01/2010, indem wir eine innere abfrage mit der parsequery wheregreaterthan parsequery wheregreaterthan methode verwenden und dann die parsequery wherematchesquery parsequery wherematchesquery methode 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 } jetzt lassen sie uns eine komplexere relationale abfrage erstellen, die nach buchhandlung buchhandlung objekten sucht, die mindestens ein buch buch haben, das von autor autor „aaron writer“ (oder „authora“) geschrieben wurde, unter verwendung von whereequalto whereequalto und wherematchesquery wherematchesquery 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 } es ist erledigt! am ende dieses leitfadens haben sie gelernt, wie relationale abfragen in parse funktionieren und wie sie sie von einer android app aus auf back4app durchführen