Partage
  • Partager sur Facebook
  • Partager sur Twitter

Afficher une adresse postale dans un TextView

grâce à la géolocalisation

Sujet résolu
    26 mars 2017 à 1:59:14

    Bonjour à tous,

    Je suis débutant en programmation Android et je dois réaliser une application afin de valider ma formation.

    Dans une activité j'aimerais récupérer les coordonnées (latitude et longitude) d'un utilisateur en cliquant sur un bouton (je ne demande pas à l'utilisateur de les saisir), et je n'affiche pas sa position sur une carte non plus. Ensuite, j'aimerais par la même fonction convertir les coordonnées ainsi trouvées (sûrement avec geocoder) afin d'afficher l'adresse de l'utilisateur directement dans un textview (ou éventuellement un toast mais je pense que le textview est mieux car il restera affiché).

    En fait cela me permettra à mon application de chasse au trésor de laisser penser à l'utilisateur qu'il va trouver des objets à sa position alors que les objets seront tirés aléatoirement grâce à Math.random() enfin je n'ai pas encore fini donc c'est en construction.

    Mais je bloquais sur ce petit détail, du coup je me demandais si quelqu'un saurait comment s'y prendre?

    Merci à tous pour vos réponses.

    GhiggzPikkoro

    -
    Edité par GhiggzPikkoro 27 mars 2017 à 23:12:53

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2017 à 23:15:38

      Salut,

      Tu adresses plusieurs sujets dans ton message. Quel est ton problème exactement ? Car tu sembles effectivement​ déjà savoir comment retrouver l'adresse postale à partir de coordonnées GPS grâce à la classe Geocoder du SDK Android.

      • Partager sur Facebook
      • Partager sur Twitter
        27 mars 2017 à 0:36:27

        Salut Rolandl,

        Merci pour votre réponse en effet je sais qu'il faut utiliser Geocoder mais je ne sais pas si je l'utilise correctement.

        Android Studio ne détecte aucune erreur lors de la compilation. Alors j'ai installé l'application sur mon téléphone (car avec l'émulateur j'y arrive pas), puis j'ouvre l'application et quand je clique sur le seul bouton qui appelle ma fonction ça plante et l'application se ferme.

        Je poste mon code Java ici si vous voulez peut être que vous comprendrez l'erreur car moi je comprends pas ce qui pose problème :

        import android.location.Address;
        import android.location.Geocoder;
        import android.location.Location;
        import android.location.LocationManager;
        import android.os.Bundle;
        import android.support.v7.app.AppCompatActivity;
        import android.widget.TextView;
        import android.widget.Toast;
        
        import java.io.IOException;
        import java.util.List;
        import java.util.Locale;
        
        public class MainActivity extends AppCompatActivity {
        
            private LocationManager lm;
            private Location location;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                this.lm = (LocationManager)this.getSystemService(LOCATION_SERVICE);
            }
        
            public void getAddress(Location location) {
                if(Geocoder.isPresent()) {
                    Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
                    List<Address> addresses = null;
                    String addressText = null;
                    double latitude = location.getLatitude();
                    double longitude = location.getLongitude();
                    try {
                        addresses = geocoder.getFromLocation(latitude, longitude, 1);
                    } catch (IOException | IllegalArgumentException e) {
                        e.printStackTrace();
                    }
        
                    if(addresses != null && addresses.size() > 0) {
                        Address address = addresses.get(0);
                        addressText = String.format("%s, %s, %s", address.getMaxAddressLineIndex()
                                        > 0 ? address.getAddressLine(0) : "",
                                address.getLocality(),
                                address.getCountryName(),
                                address.getPostalCode());
                    }
                 ((TextView)findViewById(R.id.adresse)).setText(addressText);
                } else {
                    Toast.makeText(this, "Impossible d'afficher l'adresse", Toast.LENGTH_SHORT).show();
                }
            }
        }


        Je vais mettre le layout.xml aussi :

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Afficher votre adresse"
                android:onClick="getAddress"
                android:id="@+id/b2"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/adresse"
                android:layout_below="@+id/b2"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dip"/>
        </RelativeLayout>

        J'ai bien mit les autorisations dans AndroidManifest

        Merci pour votre aide.

        -
        Edité par GhiggzPikkoro 27 mars 2017 à 1:03:07

        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2017 à 8:51:54

          Si l'application plante, tu dois avoir une stacktrace dans le logcat. C'est cette stacktrace qui nous intéresse pour comprendre ce qu'il se passe. Peux-tu la poster ici ?

          • Partager sur Facebook
          • Partager sur Twitter
            27 mars 2017 à 14:01:41

            Il n'y a aucun message dans le logcat car j'ai installé l'application sur mon téléphone directement. Je ne branche pas mon téléphone à l'ordinateur car mon téléphone n'est pas détecté par mon ordinateur (problème Samsung et Mac?, je ne sais pas pourquoi mais ça n'a jamais voulu marcher), du coup je me suis envoyé l'apk par mail et je l'ai récupéré sur mon Samsung et j'ai installé l'application comme ça sur le téléphone, du coup je n'ai aucune trace, peut être peux tu tester le projet sur ta machine virtuel si tu as le temps bien sûr?
            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2017 à 14:46:45

              Oulalala la galère.

              Tu ne peux pas développer d'applications sans faire de debug. Au moindre problème (et des problèmes, il n'y a que ça) tu te retrouves complètement perdu. En plus, le temps de générer l'apk, de l'envoyer par mail, et de l'installer, ça prend un temps fou à tester à chaque itération !

              La première chose à faire ce serait de lancer l'app sur le simulateur et/ou de régler ton problème de téléphone.

              Sur une vision à court terme, tu pourrais envisager d'installer Crashlytics pour avoir un minimum de retour. L'idéal, ce serait de faire les deux.

              En tout cas, je suis à peu près sûr que personne ne va faire ton travail à ta place : installer ton app sur un environnement de travail propre pour faire tes tests. D'une part parce que c'est long. D'autre part, parce que ça sert à rien : on ne peut pas reproduire ton environnement de travail (manifest, gradle, ressources, etc...) et au prochain problème (puisqu'il y en aura un c'est certain), tu redemanderas une itération de la procédure.

              EDIT : J'ai regardé ton code. Dans le XML tu as onClick="getAddress"

              Ta méthode doit alors être public void getAddress(View view) {}  et non getAddress(Location location) {}

              -
              Edité par Geda 27 mars 2017 à 14:53:09

              • Partager sur Facebook
              • Partager sur Twitter
                27 mars 2017 à 15:03:43

                Ok merci Geda pour ta réponse.

                Je n'arrive pas à régler ce problème de téléphone, j'ai essayé d'installé plusieurs drivers sur l'ordinateur pour le faire détecter rien à faire, d'habitude j'utilise mon émulateur pour le débug donc je ne galère pas autant je t'avouerai mais là en fait l'émulateur ne dispose pas de GPS sur Android Studio et en allant dans l'Android Device Monitor je n'arrive pas à activer cette fonctionnalité pour l'émulateur, peut être connaîtrais tu la marche à suivre?

                Si j'enlève ma méthode getAddress() du XML et que je la passe dans un OnClickListener du code Java puis-je la garder comme elle c'est à dire getAddress(Location location) ?

                • Partager sur Facebook
                • Partager sur Twitter
                  27 mars 2017 à 15:16:19

                  Tu peux simuler une location pour le simulateur avec telnet.

                  http://stackoverflow.com/a/2279827  Les commentaires de la réponse sont importants pour avoir une réponse complète.

                  Ça ne changera rien si tu créés un OnClickListener. Tu devras toujours implémenter la méthode onClick(View v). Ceci dit, je ne vois pas pourquoi tu tiens à envoyer Location en paramètre.

                  -
                  Edité par Geda 27 mars 2017 à 15:19:10

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 mars 2017 à 15:36:26

                    Salut, ton téléphone n'est pas détecté par ton ordinateur mais as-tu activé le Déboggage USB dans les options développeurs de ton appareil ?

                    Car actuellement, si tu dois à chaque fois générer un APK, te l'envoyer par mail, l'installer manuellement, tu n'arriveras jamais à t'en servir. Je dois faire 80 builds par jours au moins, avec ta solution je m'en sortirait pas du tout. Règle ton soucis pour avoir un milieu de développement correct :) 

                    • Partager sur Facebook
                    • Partager sur Twitter
                    [Android] Punch | [Android] Jessie Ryan Music | [Android] Fanfic-FR | Github | @Joadar_ |
                      27 mars 2017 à 23:12:20

                      Ok Geda je vais essayer.

                      Oui bien sûr Joadar j'ai tout activé, et même si je ne l'avais pas activé ça n'empêcherait pas l'ordinateur de détecter le téléphone donc ça vient des Drivers, je vais essayer de trouver une solution.

                      Merci pour vos réponses.

                      Le logcat ne détecte aucune position:

                      Résultat :
                      D/latitude: 0.0
                      D/longitude: 0.0

                      -
                      Edité par GhiggzPikkoro 28 mars 2017 à 19:01:46

                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 mars 2017 à 0:34:54

                        Le logcat ne détecte aucune position :

                        Résultat :
                        D/latitude: 0.0
                        D/longitude: 0.0

                        -
                        Edité par GhiggzPikkoro 29 mars 2017 à 0:35:14

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 mars 2017 à 9:51:28

                          Peux-tu reposter ton code à jour stp ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 mars 2017 à 12:58:33

                            Merci, mais c'est bon j'ai réussi à corriger mon code, j'y suis arrivé.

                            Merci à vous

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Afficher une adresse postale dans un TextView

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown