Android
Data objects
Grundlagen der Datenabfrage in Android mit Parse
12 min
grundlegende abfragen auf android einführung in diesem leitfaden werden sie grundlegende abfragen in parse parse durchführen und eine android android app mit diesen abfragen implementieren sie werden lernen, wie man realistische daten mit back4app back4app und android android abfragt dieses tutorial verwendet eine app, die in android studio 4 1 1 mit buildtoolsversion=30 0 2 buildtoolsversion=30 0 2 , compile sdk version = 30 0 2 compile sdk version = 30 0 2 und targetsdkversion=30 targetsdkversion=30 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 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 folgen sie dem 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 folgen sie dem 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 mit den nächsten schritten fortfahren, 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 1 verständnis der parse query klasse jede parse abfrageoperation verwendet den parsequery parsequery objekttyp, der ihnen hilft, spezifische daten aus ihrer datenbank in ihrer app abzurufen es ist entscheidend zu wissen, dass ein parsequery parsequery nur aufgelöst wird, nachdem eine abrufmethode aufgerufen wurde (wie query findinbackground query findinbackground ), sodass eine abfrage eingerichtet und mehrere modifikatoren verkettet werden können, bevor sie tatsächlich aufgerufen wird um eine neue parsequery parsequery , müssen sie als parameter die gewünschte parseobject unterklasse übergeben, die die abfrageergebnisse enthalten wird ein beispiel für eine abfrage ist unten zu sehen, in der eine fiktive profile unterklasse abgefragt wird 1 // this will create your query 2 parsequery\<parseobject> query = new parsequery<>("profile"); 3 // the query will resolve only after calling this method 4 query findinbackground();1 // this will create your query 2 val query = parsequery\<parseobject>("profile") 3 // the query will resolve only after calling this method 4 query findinbackground() sie können mehr über die parse query parse query klasse hier in der offiziellen dokumentation https //www back4app com/docs/javascript/parse javascript sdk 2 speichern sie einige daten auf back4app in diesem schritt werden wir eine klasse mit der js konsole und den von parse parse bereitgestellten javascript codes erstellen und wir werden abfragen für diese klasse erstellen lass uns eine profil profil klasse erstellen, die das ziel unserer abfragen in diesem leitfaden sein wird in der parse parse dashboard javascript 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 benutzer profil profil klasse mit dem folgenden beispielinhalt 1 // add profile objects and create table 2 // adam sandler 3 let profile = new parse object('profile'); 4 profile set('name', 'adam sandler'); 5 profile set('birthday', new date('09/09/1966')); 6 profile set('friendcount', 2); 7 profile set('favoritefoods', \['lobster', 'bread']); 8 await profile save(); 9 10 // adam levine 11 profile = new parse object('profile'); 12 profile set('name', 'adam levine'); 13 profile set('birthday', new date('03/18/1979')); 14 profile set('friendcount', 52); 15 profile set('favoritefoods', \['cake', 'bread']); 16 await profile save(); 17 18 // carson kressley 19 profile = new parse object('profile'); 20 profile set('name', 'carson kressley'); 21 profile set('birthday', new date('11/11/1969')); 22 profile set('friendcount', 12); 23 profile set('favoritefoods', \['fish', 'cookies']); 24 await profile save(); 25 26 // dan aykroyd 27 profile = new parse object('profile'); 28 profile set('name', 'dan aykroyd'); 29 profile set('birthday', new date('07/01/1952')); 30 profile set('friendcount', 66); 31 profile set('favoritefoods', \['jam', 'peanut butter']); 32 await profile save(); 33 34 // eddie murphy 35 profile = new parse object('profile'); 36 profile set('name', 'eddie murphy'); 37 profile set('birthday', new date('04/03/1961')); 38 profile set('friendcount', 49); 39 profile set('favoritefoods', \['lettuce', 'pepper']); 40 await profile save(); 41 42 // fergie 43 profile = new parse object('profile'); 44 profile set('name', 'fergie'); 45 profile set('birthday', new date('03/27/1975')); 46 profile set('friendcount', 55); 47 profile set('favoritefoods', \['lobster', 'shrimp']); 48 await profile save(); 49 50 console log('success!'); 3 abfrage der daten jetzt, da sie eine befüllte klasse haben, können wir einige grundlegende abfragen darin durchführen lassen sie uns damit beginnen, die profile profile ergebnisse nach namen zu filtern, was ein feld vom typ string ist, und nach werten zu suchen, die den namen adam adam enthalten, unter verwendung der parse query contains parse query contains methode 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 // `contains` is a basic query method that checks if string field 5 // contains a specific substring 6 parsequery contains('name', 'adam'); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(result get('name')); 16 }; lassen sie uns jetzt nach dem zahlenfeld friendcount friendcount abfragen, indem wir eine andere gängige abfragemethode verwenden, parse query greaterthan parse query greaterthan in diesem fall möchten wir benutzer profiles profiles abfragen, bei denen die anzahl der freunde größer als 20 ist 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 // `greaterthan` is a basic query method that does what it 5 // says on the tin 6 parsequery greaterthan('friendcount', 20); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(`name ${result get('name')}, friend count ${result get('friendcount')}`); 16 }; andere wiederkehrende abfragemethoden sind parse query ascending parse query ascending und parse query descending parse query descending , verantwortlich für die sortierung ihrer abfragen diese sortierung kann bei den meisten datentypen durchgeführt werden, also lassen sie uns eine abfrage nach dem datumsfeld birthday birthday nach dem jüngsten sortieren 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 // `descending` and `ascending` can and should be chained 5 // with other query methods to improve your queries 6 parsequery descending('birthday'); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(`name ${result get('name')}, birthday ${result get('birthday')}`); 16 }; wie hier zuvor erwähnt, können und sollten sie abfragemethoden verketten, um verfeinerte ergebnisse zu erzielen lassen sie uns dann die vorherigen beispiele in einer einzigen abfrageanfrage kombinieren 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 parsequery contains('name', 'adam'); 5 parsequery greaterthan('friendcount', 20); 6 parsequery descending('birthday'); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(`name ${result get('name')}, friend count ${result get('friendcount')}, birthday ${result get('birthday')}`); 16 }; 4 abfrage von unserer android app wir werden nun die operationen, die wir oben in der js konsole durchgeführt haben, mit java und kotlin in unserer android anwendung durchführen wir werden die profile auflisten, indem wir 4 verschiedene abfragen machen 1 private void doquerybyname() { 2 parsequery\<parseobject> query = new parsequery<>("profile"); 3 query wherecontains("name", "adam"); 4 progressdialog show(); 5 query findinbackground((objects, e) > { 6 progressdialog hide(); 7 if (e == null) { 8 adapter = new resultadapter(this, objects); 9 resultlist setlayoutmanager(new linearlayoutmanager(this)); 10 resultlist setadapter(adapter); 11 } else { 12 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 13 } 14 }); 15 } 16 17 private void doquerybyfriendcount() { 18 parsequery\<parseobject> query = new parsequery<>("profile"); 19 query wheregreaterthan("friendcount", 20); 20 progressdialog show(); 21 query findinbackground((objects, e) > { 22 progressdialog hide(); 23 if (e == null) { 24 adapter = new resultadapter(this, objects); 25 resultlist setlayoutmanager(new linearlayoutmanager(this)); 26 resultlist setadapter(adapter); 27 } else { 28 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 29 } 30 }); 31 } 32 33 private void doquerybyordering() { 34 parsequery\<parseobject> query = new parsequery<>("profile"); 35 query orderbydescending("birthday"); 36 progressdialog show(); 37 query findinbackground((objects, e) > { 38 progressdialog hide(); 39 if (e == null) { 40 adapter = new resultadapter(this, objects); 41 resultlist setlayoutmanager(new linearlayoutmanager(this)); 42 resultlist setadapter(adapter); 43 } else { 44 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 45 } 46 }); 47 } 48 49 private void doquerybyall() { 50 parsequery\<parseobject> query = new parsequery<>("profile"); 51 query wherecontains("name", "adam"); 52 query wheregreaterthan("friendcount", 20); 53 query orderbydescending("birthday"); 54 progressdialog show(); 55 56 query findinbackground((objects, e) > { 57 progressdialog hide(); 58 59 if (e == null) { 60 adapter = new resultadapter(this, objects); 61 resultlist setlayoutmanager(new linearlayoutmanager(this)); 62 resultlist setadapter(adapter); 63 resultlist setnestedscrollingenabled(false); 64 } else { 65 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 66 } 67 }); 68 }1 private fun doquerybyname() { 2 val query = parsequery\<parseobject>("profile") 3 query wherecontains("name", "adam") 4 progressdialog!! show() 5 query findinbackground { objects list\<parseobject>?, e parseexception? > 6 progressdialog!! hide() 7 if (e == null) { 8 adapter = resultadapter(this, objects) 9 resultlist!! layoutmanager = linearlayoutmanager(this) 10 resultlist!! adapter = adapter 11 } else { 12 toast maketext(this, e localizedmessage, toast length short) show() 13 } 14 } 15 } 16 17 private fun doquerybyfriendcount() { 18 val query = parsequery\<parseobject>("profile") 19 query wheregreaterthan("friendcount", 20) 20 progressdialog!! show() 21 query findinbackground { objects list\<parseobject>?, e parseexception? > 22 progressdialog!! hide() 23 if (e == null) { 24 adapter = resultadapter(this, objects) 25 resultlist!! layoutmanager = linearlayoutmanager(this) 26 resultlist!! adapter = adapter 27 } else { 28 toast maketext(this, e localizedmessage, toast length short) show() 29 } 30 } 31 } 32 33 private fun doquerybyordering() { 34 val query = parsequery\<parseobject>("profile") 35 query orderbydescending("birthday") 36 progressdialog!! show() 37 query findinbackground { objects list\<parseobject>?, e parseexception? > 38 progressdialog!! hide() 39 if (e == null) { 40 adapter = resultadapter(this, objects) 41 resultlist!! layoutmanager = linearlayoutmanager(this) 42 resultlist!! adapter = adapter 43 } else { 44 toast maketext(this, e localizedmessage, toast length short) show() 45 } 46 } 47 } 48 49 private fun doquerybyall() { 50 val query = parsequery\<parseobject>("profile") 51 query wherecontains("name", "adam") 52 query wheregreaterthan("friendcount", 20) 53 query orderbydescending("birthday") 54 progressdialog!! show() 55 query findinbackground { objects list\<parseobject>?, e parseexception? > 56 progressdialog!! hide() 57 if (e == null) { 58 adapter = resultadapter(this, objects) 59 resultlist!! layoutmanager = linearlayoutmanager(this) 60 resultlist!! adapter = adapter 61 resultlist!! isnestedscrollingenabled = false 62 } else { 63 toast maketext(this, e localizedmessage, toast length short) show() 64 } 65 } 66 } es ist vollbracht! am ende dieses leitfadens haben sie gelernt, wie grundlegende datenabfragen auf parse funktionieren und wie sie diese von einer android app aus auf back4app durchführen