Android
Data objects
Intégration de Parse GeoPoints dans Android avec Back4App
34 min
utiliser les geopoints parse dans votre application android introduction parse vous permet d'associer des coordonnées de latitude et de longitude du monde réel à un objet en ajoutant un parsegeopoint à un parseuser , vous pourrez facilement découvrir quel utilisateur est le plus proche d'un autre, afficher les emplacements des utilisateurs de votre application et également stocker les informations de localisation de l'utilisateur, parmi d'autres possibilités vous pouvez également associer un parsegeopoint à tout parseobject par exemple, si votre application est associée à un magasin avec des affiliés physiques, vous pourrez créer une activité pour montrer l'emplacement de ces magasins ou pour montrer à l'utilisateur quel magasin est le plus proche de lui un autre exemple d'utilisation de cette association si votre application est un jeu dans lequel vous avez créé des parseobjects pour représenter des personnages, ajouter des parsegeopoints à ces personnages permettrait de les afficher le long du chemin du joueur ce tutoriel explique comment utiliser certaines fonctionnalités de parsegeopoint via back4app après avoir suivi ce tutoriel, vous serez en mesure de faire cela à tout moment, vous pouvez accéder au projet android complet construit avec ce tutoriel sur notre dépôt github prérequis pour compléter ce tutoriel, nous avons besoin de android studio une application d'enregistrement d'utilisateur connexion créée sur back4app remarque suivez le tutoriel d'enregistrement d'utilisateur connexion pour apprendre à créer une application d'enregistrement d'utilisateur connexion sur back4app un appareil réel fonctionnant sous android 4 0 (ice cream sandwich) ou une version plus récente remarque il est très probable que l'application construite avec ce tutoriel ne fonctionne pas comme prévu sur un appareil virtuel et puisse même planter car elle pourrait ne pas récupérer l'emplacement actuel de l'appareil virtuel nous vous recommandons donc fortement d'utiliser un appareil réel pour l'exécuter 1 configurer la clé api google pour montrer l'emplacement que vous avez stocké dans un parsegeopoint, vous devrez afficher une carte pour ce faire, il est intéressant d'utiliser une activité google maps pour créer une activité google maps dans android studio, procédez comme suit allez à fichier fichier > nouveau nouveau > google google > activité google maps activité google maps ensuite, cela créera automatiquement un fichier java fichier java , un fichier de mise en page fichier de mise en page et un fichier de valeurs fichier de valeurs correspondant à l'activité google maps que vous avez créée allez au fichier créé valeurs valeurs (vous pouvez le faire en accédant à app app > res res > valeurs valeurs > google maps api xml google maps api xml ), comme montré dans l'image ci dessous ce fichier vous donnera des instructions sur la façon d'obtenir une clé api google maps en gros, vous devriez ouvrir le lien montré dans l'image 3\ après l'avoir ouvert, vous devez vous connecter à votre compte google, sélectionner le créer un projet créer un projet option et cliquer sur continuer continuer lors de la création du projet, google activera votre api 4\ après que votre api soit activée, vous pourrez obtenir une clé api, pour ce faire cliquez sur 5\ ensuite, votre clé sera créée et vous pourrez la copier et la coller dans le fichier de valeurs fichier de valeurs qui vous a conduit à cette page, à l'endroit où il est écrit votre clé ici votre clé ici 6\ il est important d'avoir les autorisations d'utilisation ci dessous dans votre fichier androidmanifest xml si vous avez créé l'activité google maps en suivant les instructions ci dessus, alors l'une de ces autorisations devrait déjà être dans votre manifeste, de toute façon, vous aurez besoin des deux pour que votre application fonctionne correctement, alors vérifiez si elles sont dans votre fichier androidmanifest xml, sinon, insérez les 1 \<uses permission android\ name="android permission access coarse location" /> 2 \<uses permission android\ name="android permission access fine location" /> 7\ au début de votre mapsactivity mapsactivity , importez ce qui suit 1 // android dependencies 2 import android manifest; 3 import android app progressdialog; 4 import android content context; 5 import android content dialoginterface; 6 import android content intent; 7 import android content pm packagemanager; 8 import android location location; 9 import android location locationmanager; 10 import android support annotation nonnull; 11 import android support v4 app activitycompat; 12 import android support v4 app fragmentactivity; 13 import android os bundle; 14 import android util log; 15 import android view\ view; 16 import android widget button; 17 // google maps dependencies 18 import com google android gms maps cameraupdatefactory; 19 import com google android gms maps googlemap; 20 import com google android gms maps onmapreadycallback; 21 import com google android gms maps supportmapfragment; 22 import com google android gms maps model bitmapdescriptorfactory; 23 import com google android gms maps model latlng; 24 import com google android gms maps model markeroptions; 25 // parse dependencies 26 import com parse findcallback; 27 import com parse parseexception; 28 import com parse parsegeopoint; 29 import com parse parsequery; 30 import com parse parseuser; 31 // java dependencies 32 import java util list; 2 configurez le tableau de bord back4app pour enregistrer la localisation de l'utilisateur allez sur le site web de back4app connectez vous, trouvez votre application et ouvrez son tableau de bord allez sur core core > browser browser > user user , comme indiqué dans l'image ci dessous 3\ maintenant, créez une nouvelle colonne pour enregistrer l'emplacement de l'utilisateur pour ce faire, cliquez sur le modifier modifier bouton en haut à droite, comme indiqué ci dessous 4\ ensuite, cliquez sur ajouter une colonne ajouter une colonne 5\ dans le champ quel type de données souhaitez vous stocker ?, choisissez l'option geopoint 6\ dans le champ comment devrions nous l'appeler ?, tapez “ emplacement ” 7\ donc, cliquez sur ajouter une colonne, comme indiqué dans l'image ci dessous 8\ maintenant, votre application est capable de stocker les données de localisation des utilisateurs et votre classe utilisateur dans votre tableau de bord back4pp devrait ressembler à ceci 3 enregistrer la localisation actuelle des utilisateurs dans votre tableau de bord back4pp ouvrez votre mapsactivity mapsactivity et à l'intérieur de la classe publique mapsactivity mapsactivity définissez un int appelé request location request location avec la valeur 1 et un locationmanager locationmanager , comme dans le code suivant 1 private static final int request location = 1; 2 locationmanager locationmanager; 2\ dans le oncreate oncreate méthode, créez le locationmanager locationmanager , comme dans le code suivant 1 locationmanager = (locationmanager)getsystemservice(context location service); 3\ pour enregistrer la localisation de l'utilisateur dans votre tableau de bord back4pp, implémentez simplement la méthode suivante et appelez la dans votre onmapready onmapready méthode 1 private void savecurrentuserlocation() { 2 // requesting permission to get user's location 3 if(activitycompat checkselfpermission(usersactivity this, manifest permission access fine location) != packagemanager permission granted && activitycompat checkselfpermission(usersactivity this, manifest permission access coarse location) != packagemanager permission granted){ 4 activitycompat requestpermissions(usersactivity this, new string\[]{android manifest permission access fine location}, request location); 5 } 6 else { 7 // getting last know user's location 8 location location = locationmanager getlastknownlocation(locationmanager network provider); 9 10 // checking if the location is null 11 if(location != null){ 12 // if it isn't, save it to back4app dashboard 13 parsegeopoint currentuserlocation = new parsegeopoint(location getlatitude(), location getlongitude()); 14 15 parseuser currentuser = parseuser getcurrentuser(); 16 17 if (currentuser != null) { 18 currentuser put("location", currentuserlocation); 19 currentuser saveinbackground(); 20 } else { 21 // do something like coming back to the login activity 22 } 23 } 24 else { 25 // if it is null, do something like displaying error and coming back to the menu activity 26 } 27 } 28 } 4\ il est vraiment important d'implémenter la méthode suivante afin que savecurrentuserlocation savecurrentuserlocation fonctionne 1 @override 2 public void onrequestpermissionsresult(int requestcode, @nonnull string\[] permissions, @nonnull int\[] grantresults){ 3 super onrequestpermissionsresult(requestcode, permissions, grantresults); 4 5 switch (requestcode){ 6 case request location 7 savecurrentuserlocation(); 8 break; 9 } 10 } 4 récupérer la localisation de l'utilisateur pour récupérer la localisation de l'utilisateur, vous devez trouver qui est l'utilisateur actuel, enregistrer sa localisation et ensuite retourner la localisation enregistrée dans votre tableau de bord back4app pour ce faire, implémentez la méthode suivante dans votre mapsactivity mapsactivity et appelez la lorsque nécessaire 1 / saving the current user location, using the savecurrentuserlocation method of step 3, to avoid 2 null pointer exception and also to return the user's most current location / 3 savecurrentuserlocation(); 4 private parsegeopoint getcurrentuserlocation(){ 5 6 // finding currentuser 7 parseuser currentuser = parseuser getcurrentuser(); 8 9 if (currentuser == null) { 10 // if it's not possible to find the user, do something like returning to login activity 11 } 12 // otherwise, return the current user location 13 return currentuser getparsegeopoint("location"); 14 15 } 5 afficher l'emplacement actuel de l'utilisateur sur la carte pour afficher l'emplacement de l'utilisateur sur la carte, vous devrez récupérer l'emplacement de l'utilisateur puis créer un marqueur sur la carte en utilisant les informations récupérées pour ce faire, implémentez la méthode suivante dans votre mapsactivity mapsactivity et appelez la dans le onmapready onmapready méthode 1 private void showcurrentuserinmap(final googlemap googlemap){ 2 3 // calling retrieve user's location method of step 4 4 parsegeopoint currentuserlocation = getcurrentuserlocation(); 5 6 // creating a marker in the map showing the current user location 7 latlng currentuser = new latlng(currentuserlocation getlatitude(), currentuserlocation getlongitude()); 8 googlemap addmarker(new markeroptions() position(currentuser) title(parseuser getcurrentuser() getusername()) icon(bitmapdescriptorfactory defaultmarker(bitmapdescriptorfactory hue red))); 9 10 // zoom the map to the currentuserlocation 11 googlemap animatecamera(cameraupdatefactory newlatlngzoom(currentuser, 5)); 12 } 6 trouver l'utilisateur le plus proche de l'utilisateur actuel maintenant que vous avez un certain nombre d'utilisateurs avec des coordonnées spatiales associées, il serait bon de découvrir quel utilisateur est le plus proche d'un autre cela peut être fait en utilisant un parsequery tout d'abord, vous devrez créer une requête parseuser et la restreindre avec wherenear wherenear , en informant dans quelle colonne de la classe user sur back4app vous effectuez la requête (dans ce cas, la colonne "location") et aussi informer le parsegeopoint de référence pour la requête à partir de laquelle sera trouvé l'utilisateur le plus proche (dans ce cas, le parsegeopoint associé à l'emplacement actuel de l'utilisateur) le code suivant le fait 1 parsequery\<parseuser> query = parseuser getquery(); 2 query wherenear("location", getcurrentuserlocation()); 2\ vous pouvez limiter le nombre de résultats de cette requête en ajoutant la restriction setlimit setlimit par défaut, les résultats sont limités à 100 comme la wherenear wherenear restriction fera que la requête récupère un tableau d'utilisateurs ordonné par distance (du plus proche au plus éloigné) de currentuserlocation, en fixant la limite des utilisateurs proches à 2, la liste des résultats de la requête n'aura que deux utilisateurs l'utilisateur actuel et l'utilisateur le plus proche de lui le code suivant fixe la limite des résultats à 2 1 query setlimit(2); 3\ maintenant que vous avez restreint votre requête, récupérons ses résultats pour ce faire, vous appellerez une findinbackground findinbackground méthode et passerez en argument une liste d'utilisateurs, dans laquelle seront stockés les résultats de la requête ainsi qu'une parseexception pour gérer les erreurs pour éviter les erreurs, n'oubliez pas de vider les résultats mis en cache après l'exécution de la requête le code suivant le fait 1 query findinbackground(new findcallback\<parseuser>() { 2 @override public void done(list\<parseuser> nearusers, parseexception e) { 3 if (e == null) { 4 // do something with the list of results of your query 5 } else { 6 // handle the error 7 } 8 } 9 }); 10 parsequery clearallcachedresults(); 11 } 4\ si aucune erreur ne se produit, vous aurez dans le nearusers nearusers la liste des deux utilisateurs les plus proches de l'utilisateur actuel (l'utilisateur actuel et l'utilisateur le plus proche de lui), maintenant vous n'aurez qu'à trouver qui n'est pas l'utilisateur actuel pour ce faire, à l'intérieur du if (e == null) if (e == null) bloc, utilisez le code suivant 1 // avoiding null pointer 2 parseuser closestuser = parseuser getcurrentuser(); 3 // set the closestuser to the one that isn't the current user 4 for(int i = 0; i < nearusers size(); i++) { 5 if(!nearusers get(i) getobjectid() equals(parseuser getcurrentuser() getobjectid())) { 6 closestuser = nearusers get(i); 7 } 8 } 5\ maintenant que vous savez qui est l'utilisateur le plus proche de l'utilisateur actuel, vous pouvez mesurer la distance entre eux en utilisant le distanceinkilometersto distanceinkilometersto méthode pour ce faire, utilisez le code suivant 1 // finding and displaying the distance between the current user and the closest user to him 2 double distance = getcurrentuserlocation() distanceinkilometersto(closestuser getparsegeopoint("location")); 3 alertdisplayer("we found the closest user from you!", "it's " + closestuser getusername() + " \nyou are " + math round (distance 100 0) / 100 0 + " km from this user "); le alertdisplayer alertdisplayer méthode utilisée ci dessus est la suivante 1 private void alertdisplayer(string title,string message){ 2 android app alertdialog builder builder = new android app alertdialog builder(usersactivity this) 3 settitle(title) 4 setmessage(message) 5 setpositivebutton("ok", new dialoginterface onclicklistener() { 6 @override 7 public void onclick(dialoginterface dialog, int which) { 8 dialog cancel(); 9 } 10 }); 11 android app alertdialog ok = builder create(); 12 ok show(); 13 } 6\ vous pouvez également afficher les deux utilisateurs sur la carte, en utilisant le code suivant 1 // showing current user in map, using the method implemented in step 5 2 showcurrentuserinmap(mmap); 3 // creating a marker in the map showing the closest user to the current user location, using method implemented in step 4 4 latlng closestuserlocation = new latlng(closestuser getparsegeopoint("location") getlatitude(), closestuser getparsegeopoint("location") getlongitude()); 5 googlemap addmarker(new markeroptions() position(closestuserlocation) title(closestuser getusername()) icon(bitmapdescriptorfactory defaultmarker(bitmapdescriptorfactory hue green))); 6 // zoom the map to the currentuserlocation 7 googlemap animatecamera(cameraupdatefactory newlatlngzoom(closestuserlocation, 3)); la méthode complète qui exécute toutes les 6 étapes ci dessus est la suivante 1 private void showclosestuser(final googlemap googlemap){ 2 parsequery\<parseuser> query = parseuser getquery(); 3 query wherenear("location", getcurrentuserlocation()); 4 // setting the limit of near users to find to 2, you'll have in the nearusers list only two users the current user and the closest user from the current 5 query setlimit(2); 6 query findinbackground(new findcallback\<parseuser>() { 7 @override public void done(list\<parseuser> nearusers, parseexception e) { 8 if (e == null) { 9 // avoiding null pointer 10 parseuser closestuser = parseuser getcurrentuser(); 11 // set the closestuser to the one that isn't the current user 12 for(int i = 0; i < nearusers size(); i++) { 13 if(!nearusers get(i) getobjectid() equals(parseuser getcurrentuser() getobjectid())) { 14 closestuser = nearusers get(i); 15 } 16 } 17 // finding and displaying the distance between the current user and the closest user to him, using method implemented in step 4 18 double distance = getcurrentuserlocation() distanceinkilometersto(closestuser getparsegeopoint("location")); 19 alertdisplayer("we found the closest user from you!", "it's " + closestuser getusername() + " \n you are " + math round (distance 100 0) / 100 0 + " km from this user "); 20 // showing current user in map, using the method implemented in step 5 21 showcurrentuserinmap(mmap); 22 // creating a marker in the map showing the closest user to the current user location 23 latlng closestuserlocation = new latlng(closestuser getparsegeopoint("location") getlatitude(), closestuser getparsegeopoint("location") getlongitude()); 24 googlemap addmarker(new markeroptions() position(closestuserlocation) title(closestuser getusername()) icon(bitmapdescriptorfactory defaultmarker(bitmapdescriptorfactory hue green))); 25 // zoom the map to the currentuserlocation 26 googlemap animatecamera(cameraupdatefactory newlatlngzoom(closestuserlocation, 3)); 27 } else { 28 log d("store", "error " + e getmessage()); 29 } 30 } 31 }); 32 parsequery clearallcachedresults(); 33 } 7 configurer back4app pour associer parsegeopoint à parseobjects supposons que l'application exemple que vous construisez soit associée à un groupe de magasins avec des affiliés physiques il serait intéressant de montrer tous les affiliés physiques de ce magasin sur la carte pour ce faire, créez une classe stores sur le tableau de bord back4pp, enregistrez les magasins existants en tant qu'objets parse, leurs emplacements et après cela, l'application pourra interroger les affiliés physiques et afficher leurs positions sur la carte les étapes suivantes vous aideront avec cela 1 allez sur le site web de back4app , connectez vous, trouvez votre application et ouvrez son tableau de bord 2\ allez sur noyau noyau > navigateur navigateur > créer une classe créer une classe , comme montré dans l'image ci dessous 3\ dans le champ quel typ e de classe avez vous besoin ? e de classe avez vous besoin ? , choisissez l'option personnalisée personnalisée 4\ dans le champ comment devrions nous l'appeler ? comment devrions nous l'appeler ? , tapez “magasins” puis cliquez sur le créer une classe créer une classe bouton 5\ ensuite, une nouvelle classe appelée “magasins” sera affichée et vous devrez insérer 2 colonnes une colonne avec le type de données chaîne chaîne appelée nom nom , ainsi qu'une autre colonne avec le type de données geopoint geopoint appelée emplacement emplacement si vous ne vous souvenez pas comment créer une colonne, revenez à l'étape 2, là il est expliqué comment créer une colonne dans le tableau de bord back4app votre classe devrait se terminer comme ceci 6\ maintenant, remplissez cette classe avec des informations pour ce faire, cliquez sur ajouter une ligne ajouter une ligne bouton dans le menu en haut à droite ou au milieu de la page, comme indiqué dans l'image ci dessous 7\ ensuite, remplissez la ligne avec les informations requises le nom du magasin et sa latitude et longitude après avoir inséré des données, votre classe magasins devrait ressembler à l'image ci dessous si vous souhaitez insérer plus de données, vous pouvez cliquer sur le ajouter une ligne ajouter une ligne bouton en haut, ou sur le + + bouton en dessous de la dernière ligne de données maintenant, vous êtes prêt à utiliser les informations de localisation des magasins dans votre application 8 afficher tous les emplacements des magasins sur la carte 1\ vous pouvez afficher tous les magasins que vous avez ajoutés à votre classe sur le mapsactivity mapsactivity en utilisant un parsequery tout d'abord, vous devrez créer une requête parseobject, en informant le nom de la classe back4pp dashboard que vous souhaitez interroger (dans ce cas, la classe “stores”), et la restreindre avec whereexists whereexists , en informant la colonne de la classe store sur back4app que vous interrogez (dans ce cas, la colonne “location”) le code suivant fait cela 1 parsequery\<parseobject> query = parsequery getquery("stores"); 2 query whereexists("location"); 2\ maintenant que vous avez restreint votre requête, récupérons ses résultats pour ce faire, vous appellerez une findinbackground findinbackground méthode et passerez en argument une liste de magasins, dans laquelle seront stockés les résultats de la requête ainsi qu'une parseexception pour gérer les erreurs la whereexists whereexists restriction ne stockera que les parseobjects de la classe qui ont un parsegeopoint associé indiquant leur emplacement dans la liste des magasins pour éviter les erreurs, n'oubliez pas de vider les résultats mis en cache après l'exécution de la requête le code suivant fait cela 1 query findinbackground(new findcallback\<parseobject>() { 2 @override public void done(list\<parseobject> stores, parseexception e) { 3 if (e == null) { 4 // do something with the list of results of your query 5 } else { 6 // handle the error 7 } 8 } 9 }); 10 parsequery clearallcachedresults(); 11 } 3\ si aucune erreur ne se produit, vous aurez dans la liste des magasins liste des magasins tous les magasins avec un emplacement associé, maintenant vous n'aurez plus qu'à faire une boucle pour les afficher sur la carte pour ce faire, à l'intérieur du if (e == null) if (e == null) bloc, utilisez le code suivant 1 for(int i = 0; i < stores size(); i++) { 2 latlng storelocation = new latlng(stores get(i) getparsegeopoint("location") getlatitude(), stores get(i) getparsegeopoint("location") getlongitude()); 3 googlemap addmarker(new markeroptions() position(storelocation) title(stores get(i) getstring("name")) icon(bitmapdescriptorfactory defaultmarker(bitmapdescriptorfactory hue azure))); 4 } la méthode complète qui exécute les 3 étapes ci dessus est ci dessous appelez la sur le onmapready onmapready méthode pour qu'elle fonctionne 1 private void showstoresinmap(final googlemap googlemap){ 2 3 parsequery\<parseobject> query = parsequery getquery("stores"); 4 query whereexists("location"); 5 query findinbackground(new findcallback\<parseobject>() { 6 @override public void done(list\<parseobject> stores, parseexception e) { 7 if (e == null) { 8 for(int i = 0; i < stores size(); i++) { 9 latlng storelocation = new latlng(stores get(i) getparsegeopoint("location") getlatitude(), stores get(i) getparsegeopoint("location") getlongitude()); 10 googlemap addmarker(new markeroptions() position(storelocation) title(stores get(i) getstring("name")) icon(bitmapdescriptorfactory defaultmarker(bitmapdescriptorfactory hue azure))); 11 } 12 } else { 13 // handle the error 14 log d("store", "error " + e getmessage()); 15 } 16 } 17 }); 18 parsequery clearallcachedresults(); 19 } 9 montrer l'utilisateur le plus proche d'un magasin 1\ maintenant que vous avez un certain nombre de magasins avec des coordonnées spatiales associées, il serait bon de découvrir quel magasin est le plus proche d'un utilisateur cela peut être fait en utilisant un parsequery tout d'abord, vous devrez créer une requête parseobject, en informant le nom de la classe back4pp dashboard que vous souhaitez interroger (dans ce cas, la classe “stores”), et la restreindre avec wherenear wherenear , en informant la colonne de la classe store sur back4app que vous interrogez (dans ce cas, la colonne “location”) le code suivant le fait 1 parsequery\<parseobject> query = parsequery getquery("stores"); 2 query wherenear("location", getcurrentuserlocation()); 2\ vous pouvez limiter le nombre de résultats de cette requête en ajoutant à celle ci la restriction setlimit setlimit par défaut, les résultats sont limités à 100 comme la wherenear wherenear restriction fera que la requête récupère un tableau d'utilisateurs ordonnés par distance (du plus proche au plus éloigné) de currentuserlocation, en fixant la limite des utilisateurs proches à 1, la liste des résultats de la requête n'aura qu'un seul magasin le plus proche de l'utilisateur actuel le code suivant fixe la limite des résultats à 1 1 query setlimit(1); 3\ maintenant que vous avez restreint votre requête, récupérons ses résultats pour ce faire, vous appellerez une findinbackground findinbackground méthode et passerez en argument une liste d'objets de magasin, dans laquelle seront stockés les résultats de la requête et également une parseexception pour gérer les erreurs pour éviter les erreurs, n'oubliez pas de vider les résultats mis en cache après que la requête ait trouvé un résultat le code suivant fait cela 1 query findinbackground(new findcallback\<parseobject>() { 2 @override public void done(list\<parseobject> nearstores, parseexception e) { 3 if (e == null) { 4 // do something with the list of results of your query 5 } else { 6 // handle the error 7 } 8 } 9 }); 10 parsequery clearallcachedresults(); 11 } 4\ s'il n'y a pas d'erreur, vous aurez dans la nearstores nearstores liste le magasin le plus proche de l'utilisateur actuel, maintenant vous n'aurez plus qu'à l'afficher sur le mapsactivity mapsactivity pour ce faire, à l'intérieur du if (e == null) if (e == null) bloc, utilisez le code suivant 1 parseobject closeststore = nearstores get(0); 2 // showing current user location, using the method implemented in step 5 3 showcurrentuserinmap(mmap); 4 // finding and displaying the distance between the current user and the closest store to him, using method implemented in step 4 5 double distance = getcurrentuserlocation() distanceinkilometersto(closeststore getparsegeopoint("location")); 6 alertdisplayer("we found the closest store from you!", "it's " + closeststore getstring("name") + " \n you are " + math round (distance 100 0) / 100 0 + " km from this store "); 7 // creating a marker in the map showing the closest store to the current user 8 latlng closeststorelocation = new latlng(closeststore getparsegeopoint("location") getlatitude(), closeststore getparsegeopoint("location") getlongitude()); 9 googlemap addmarker(new markeroptions() position(closeststorelocation) title(closeststore getstring("name")) icon(bitmapdescriptorfactory defaultmarker(bitmapdescriptorfactory hue green))); 10 // zoom the map to the closeststorelocation 11 googlemap animatecamera(cameraupdatefactory newlatlngzoom(closeststorelocation, 3)); la alertdisplayer alertdisplayer méthode utilisée ci dessus est la même que celle de l'étape 6 (trouver l'utilisateur le plus proche de l'utilisateur actuel) la méthode complète qui exécute les 4 étapes ci dessus est la suivante 1 private void showcloseststore(final googlemap googlemap){ 2 parsequery\<parseobject> query = parsequery getquery("stores"); 3 query wherenear("location", getcurrentuserlocation()); 4 // setting the limit of near stores to 1, you'll have in the nearstores list only one object the closest store from the current user 5 query setlimit(1); 6 query findinbackground(new findcallback\<parseobject>() { 7 @override public void done(list\<parseobject> nearstores, parseexception e) { 8 if (e == null) { 9 parseobject closeststore = nearstores get(0); 10 // showing current user location, using the method implemented in step 5 11 showcurrentuserinmap(mmap); 12 // finding and displaying the distance between the current user and the closest store to him, using method implemented in step 4 13 double distance = getcurrentuserlocation() distanceinkilometersto(closeststore getparsegeopoint("location")); 14 alertdisplayer("we found the closest store from you!", "it's " + closeststore getstring("name") + " \nyou are " + math round (distance 100 0) / 100 0 + " km from this store "); 15 // creating a marker in the map showing the closest store to the current user 16 latlng closeststorelocation = new latlng(closeststore getparsegeopoint("location") getlatitude(), closeststore getparsegeopoint("location") getlongitude()); 17 googlemap addmarker(new markeroptions() position(closeststorelocation) title(closeststore getstring("name")) icon(bitmapdescriptorfactory defaultmarker(bitmapdescriptorfactory hue green))); 18 // zoom the map to the closeststorelocation 19 googlemap animatecamera(cameraupdatefactory newlatlngzoom(closeststorelocation, 3)); 20 } else { 21 log d("store", "error " + e getmessage()); 22 } 23 } 24 }); 25 26 parsequery clearallcachedresults(); 27 28 } 10 testez votre application 1\ connectez vous à back4app site web https //www back4app com/ 2\ trouvez votre application et cliquez sur tableau de bord tableau de bord > noyau noyau > navigateur navigateur > utilisateur utilisateur et créez quelques utilisateurs avec un emplacement associé à eux pour permettre à la méthode showclosestuser showclosestuser de fonctionner 3\ exécutez votre application sur un appareil réel et inscrivez vous pour un compte essayez chaque fonctionnalité! 4\ retournez au tableau de bord back4pp et vérifiez si votre emplacement est enregistré dans votre ligne d'utilisateur c'est fait! à ce stade, vous pouvez utiliser certaines fonctionnalités de parsegeopoint via back4app!