Android
Data objects
Выполнение GeoPoint запросов в Android приложении на Parse
9 мин
геозапросы введение в этом руководстве вы узнаете, как выполнять запросы geopoint на parse в приложении для android этот учебник использует приложение, созданное в android studio arctic fox 2020 3 1 с compilesdk = 30 compilesdk = 30 , minsdk = 23 minsdk = 23 и targetsdk = 30 targetsdk = 30 в любое время вы можете получить доступ к полному проекту android, созданному с помощью этого учебника, в наших репозиториях на github https //github com/templates back4app/android parse sdk kotlin https //github com/templates back4app/android parse sdk java цель выполните геозапросы, используя геоточки, хранящиеся на back4app и геолокацию android вот предварительный просмотр того, что мы собираемся достичь предварительные требования чтобы завершить этот учебник, нам нужно https //developer android com/studio/index html приложение, созданное на back4app примечание следуйте за https //www back4app com/docs/get started/new parse app чтобы узнать, как создать parse app на back4app android приложение, подключенное к back4app примечание следуйте за 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) или новее давайте начнем! перед следующими шагами нам нужно подключить back4app back4app к нашему приложению вам следует сохранить appid appid и clientkey clientkey из back4app back4app в файл string xml string xml и затем инициализировать parse parse в нашем файле app java app java или app kt app kt следуйте https //www back4app com/docs/android/parse android sdk если вы не знаете, как инициализировать parse parse в вашем приложении или вы можете скачать проекты, ссылки на которые мы поделились выше, и отредактировать только appid appid и clientkey clientkey в соответствии с вашими требованиями 1 сохраните некоторые данные на back4app на этом этапе мы создадим класс с помощью консоли js и предоставленных кодов javascript от parse parse и мы создадим запросы для этого класса давайте создадим класс город город , который будет целью наших запросов в этом руководстве в консоли parse js можно выполнять код javascript напрямую, запрашивая и обновляя содержимое вашей базы данных приложения с помощью команд js sdk запустите код ниже из вашей консоли js и вставьте данные в back4app вот как выглядит консоль js на вашей панели управления продолжайте и создайте класс город город с следующим примером содержимого 1 // add city objects and create table 2 // note how geopoints are created, passing latitude and longitude as arguments 3 // montevideo 4 city = new parse object('city'); 5 city set('name', 'montevideo uruguay'); 6 city set('location', new parse geopoint( 34 85553195363169, 56 207280375137955)); 7 await city save(); 8 9 // brasília 10 city = new parse object('city'); 11 city set('name', 'brasília brazil'); 12 city set('location', new parse geopoint( 15 79485821477289, 47 88391074690196)); 13 await city save(); 14 15 // bogotá 16 city = new parse object('city'); 17 city set('name', 'bogotá colombia'); 18 city set('location', new parse geopoint(4 69139880891712, 74 06936691331047)); 19 await city save(); 20 21 // mexico city 22 city = new parse object('city'); 23 city set('name', 'mexico city mexico'); 24 city set('location', new parse geopoint(19 400977162618933, 99 13311378164776)); 25 await city save(); 26 27 // washington, d c 28 city = new parse object('city'); 29 city set('name', 'washington, d c usa'); 30 city set('location', new parse geopoint(38 930727220189944, 77 04626261880388)); 31 await city save(); 32 33 // ottawa 34 city = new parse object('city'); 35 city set('name', 'ottawa canada'); 36 city set('location', new parse geopoint(45 41102167733425, 75 695414598736)); 37 await city save(); 38 39 console log('success!'); 2 запрос данных из android приложения теперь, когда у вас есть заполненный класс, мы можем выполнить некоторые запросы geopoint в нем давайте начнем с сортировки город город результатов по ближайшим к кингстону на ямайке (широта 18 01808695059913 и долгота 76 79894232253473), используя метод parsequery wherenear parsequery wherenear 1 parsequery\<parseobject> query = new parsequery<>("city"); 2 query wherenear("location",new parsegeopoint(18 018086, 76 798942)); 3 query findinbackground((objects, e) > { 4 if (e==null){ 5 initdata(objects); 6 } else { 7 toast maketext(mainactivity this, e getlocalizedmessage(), toast length short) show(); 8 } 9 });1 val query = parsequery\<parseobject>("city") 2 query wherenear("location", parsegeopoint(18 018086, 76 798942)) 3 query findinbackground { objects list\<parseobject>?, e parseexception? > 4 if (e == null) { 5 initdata(objects!!) 6 } else { 7 toast maketext(this\@mainactivity, e localizedmessage, toast length short) 8 show() 9 } 1 0 } теперь давайте выполним запрос, используя метод parsequery wherewithinkilometers parsequery wherewithinkilometers , который извлечет все результаты, чье поле geopoint находится в пределах максимального расстояния в качестве ссылки снова будет использоваться кингстон, а предел расстояния составит 3000 км 1 parsequery\<parseobject> query = new parsequery<>("city"); 2 query wherewithinkilometers("location",new parsegeopoint(18 018086, 76 798942),3000); 3 query findinbackground((objects, e) > { 4 if (e==null){ 5 initdata(objects); 6 } else { 7 toast maketext(mainactivity this, e getlocalizedmessage(), toast length short) show(); 8 } 9 });1 val query = parsequery\<parseobject>("city") 2 query wherewithinkilometers( 3 "location", 4 parsegeopoint(18 018086, 76 798942), 5 3000 0 6 ) 7 query findinbackground { objects list\<parseobject>?, e parseexception? > 8 if (e == null) { 9 initdata(objects!!) 10 } else { 11 toast maketext(this\@mainactivity, e localizedmessage, toast length short) 12 show() 13 } 14 } еще один полезный метод запроса это parsequery wherewithinpolygon parsequery wherewithinpolygon , который будет запрашивать результаты, чье значение поля geopoint находится внутри указанного полигона, состоящего из массива geopoints (не менее трех) если путь полигона открыт, он будет автоматически закрыт parse, соединяя последние и первые точки в этом примере вы будете использовать простой полигон, который примерно охватывает континент южной америки, состоящий из 5 удаленных geopoints в океане 1 parsequery\<parseobject> query = new parsequery<>("city"); 2 3 parsegeopoint geopoint1 = new parsegeopoint(15 822238344514378, 72 42845934415942); 4 parsegeopoint geopoint2 = new parsegeopoint( 0 7433770196268968, 97 44765968406668); 5 parsegeopoint geopoint3 = new parsegeopoint( 59 997149373299166, 76 52969196322749); 6 parsegeopoint geopoint4 = new parsegeopoint( 9 488786415007201, 18 346101586021952); 7 parsegeopoint geopoint5 = new parsegeopoint(15 414859532811047, 60 00625459569375); 8 parsegeopoint geopoint6 = new parsegeopoint(41 015137, 28 97953); 9 10 list\<parsegeopoint> list = new arraylist<>(); 11 list add(geopoint1); 12 list add(geopoint2); 13 list add(geopoint3); 14 list add(geopoint4); 15 list add(geopoint5); 16 list add(geopoint6); 17 query wherewithinpolygon("location",list); 18 19 query findinbackground((objects, e) > { 20 if (e==null){ 21 initdata(objects); 22 } else { 23 toast maketext(mainactivity this, e getlocalizedmessage(), toast length short) show(); 24 } 25 });1 val query = parsequery\<parseobject>("city") 2 val geopoint1 = parsegeopoint(15 822238344514378, 72 42845934415942) 3 val geopoint2 = parsegeopoint( 0 7433770196268968, 97 44765968406668) 4 val geopoint3 = parsegeopoint( 59 997149373299166, 76 52969196322749) 5 val geopoint4 = parsegeopoint( 9 488786415007201, 18 346101586021952) 6 val geopoint5 = parsegeopoint(15 414859532811047, 60 00625459569375) 7 val geopoint6 = parsegeopoint(41 015137, 28 97953) 8 val list mutablelist\<parsegeopoint> = 9 arraylist() 10 list add(geopoint1) 11 list add(geopoint2) 12 list add(geopoint3) 13 list add(geopoint4) 14 list add(geopoint5) 15 list add(geopoint6) 16 query wherewithinpolygon("location", list) 17 query findinbackground { objects list\<parseobject>?, e parseexception? > 18 if (e == null) { 19 initdata(objects!!) 20 } else { 21 toast maketext(this\@mainactivity, e localizedmessage, toast length short) 22 show() 23 } 24 } сделано! в конце этого руководства вы узнали, как работают запросы данных geopoint в parse и как выполнять их на back4app из android приложения в следующем руководстве вы узнаете, как создавать и управлять пользователями в parse