Android
Data objects
Основы выполнения Parse запросов данных в Android
12 мин
основные запросы на android введение в этом руководстве вы выполните основные запросы в parse parse и реализуете приложение android android с использованием этих запросов вы научитесь настраивать и запрашивать реалистичные данные с помощью back4app back4app и android android этот учебник использует приложение, созданное в android studio 4 1 1 с buildtoolsversion=30 0 2 buildtoolsversion=30 0 2 , compile sdk version = 30 0 2 compile sdk version = 30 0 2 и targetsdkversion=30 targetsdkversion=30 в любое время вы можете получить доступ к полному проекту android, созданному с помощью этого учебника, в наших репозиториях github репозиторий примера на kotlin репозиторий примера на java цель наша цель запрашивать данные, хранящиеся на back4app back4app из приложения android android вот предварительный просмотр того, что мы собираемся достичь предварительные условия чтобы завершить этот учебник, нам нужно android studio приложение, созданное на back4app примечание следуйте за учебником по новому приложению parse чтобы узнать, как создать приложение parse на back4app android приложение, подключенное к back4app примечание следуйте за учебником по установке sdk parse чтобы создать проект android studio, подключенный к back4app устройство (или виртуальное устройство ) с android 4 1 (jelly bean) или новее давайте начнем! перед следующими шагами нам нужно подключить back4app back4app к нашему приложению вам следует сохранить appid appid и clientkey clientkey из back4app back4app в файл string xml string xml и затем инициализировать parse parse в нашем app java app java или app kt app kt файле следуйте за новый учебник по parse app если вы не знаете, как инициализировать parse parse в вашем приложении или вы можете скачать проекты, ссылки на которые мы поделились выше, и редактировать только appid appid и clientkey clientkey части в соответствии с вашими требованиями 1 понимание класса parse query любая операция запроса parse использует тип объекта parsequery parsequery , который поможет вам извлекать конкретные данные из вашей базы данных на протяжении всего вашего приложения крайне важно знать, что parsequery parsequery разрешится только после вызова метода извлечения (например, query findinbackground query findinbackground ), поэтому запрос может быть настроен, и несколько модификаторов могут быть связаны перед фактическим вызовом чтобы создать новый parsequery parsequery , вам нужно передать в качестве параметра желаемый подкласс parseobject, который будет содержать результаты вашего запроса пример запроса можно увидеть ниже, в котором запрашивается вымышленный подкласс profile 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() вы можете узнать больше о parse query parse query классе здесь в официальной документации https //www back4app com/docs/javascript/parse javascript sdk 2 сохраните некоторые данные на back4app на этом этапе мы создадим класс с помощью js console и предоставленных кодов javascript от parse parse и мы создадим запросы для этого класса давайте создадим класс профиль профиль , который будет целью наших запросов в этом руководстве в parse parse dashboard javascript console можно выполнять код javascript напрямую, запрашивая и обновляя содержимое вашей базы данных приложения с помощью команд js sdk запустите код ниже из вашей js console и вставьте данные на back4app вот как выглядит js console в вашей панели продолжайте и создайте класс пользователя профиль профиль с следующим примером содержимого 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 запрос данных теперь, когда у вас есть заполненный класс, мы можем выполнить некоторые базовые запросы в нем давайте начнем с фильтрации profile profile результатов по имени, которое является полем типа строка, и будем искать значения, содержащие имя адам адам с помощью метода parse query contains parse query contains 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 }; теперь давайте сделаем запрос по полю типа числа friendcount friendcount с использованием другого общего метода запроса, parse query greaterthan parse query greaterthan в этом случае мы хотим пользователей profiles profiles у которых количество друзей больше 20 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 }; другие повторяющиеся методы запроса это parse query ascending parse query ascending и parse query descending parse query descending , отвечающие за упорядочение ваших запросов это упорядочение может быть выполнено для большинства типов данных, поэтому давайте упорядочим запрос по полю даты birthday birthday по самому младшему 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 }; как уже было сказано ранее, вы можете и должны связывать методы запроса, чтобы достичь более точных результатов давайте тогда объединим предыдущие примеры в одном запросе 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 запрос из нашего android приложения теперь мы выполним операции, которые мы сделали выше из js console, с помощью java и kotlin в нашем android приложении мы перечислим профили, сделав 4 разных запроса 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 } сделано! в конце этого руководства вы узнали, как работают основные запросы данных на parse и как выполнять их на back4app из android приложения