IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Récupérer et afficher la latitude et la longitude


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut Récupérer et afficher la latitude et la longitude
    Bonjour tout le monde,

    en faisant une recherche, j'ai remarqué que c'est un problème fréquemment rencontré. Malheureusement, je n'arrive pas à le régler de mon côté.

    Je cherche donc à récupérer la latitude et la longitude et les afficher dans un premier temps avec un println.
    Je tiens à préciser que je débute en Android.

    Voici le code tel qu'il est pour le moment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    import android.app.Activity;
    import ...
     
    public class Ecran_creation extends Activity implements LocationListener {
        /** Called when the activity is first created. */
     
    	// on déclare tout les éléments qui vont être utilisés dans cette classe ici
     	Button BretourCr;
     	Button BvaliderCr;
     	EditText nom;
     	EditText espece;
     	EditText description;
     	EditText image;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            try {
     
            	//l'écran visible est creer.xml
            	setContentView(R.layout.creer);
     
            // on attache tout les éléments crées dans la classe aux éléments existants dans "res", ici ce sont les éléments des fichiers xml
     
            BretourCr = (Button) findViewById(R.id.B_retourCr);
            BvaliderCr = (Button) findViewById(R.id.B_validerCr);
            nom = (EditText) findViewById(R.id.saisie_nom);
        	espece= (EditText) findViewById(R.id.saisie_espece);
        	description= (EditText) findViewById(R.id.saisie_description);
        	image= (EditText) findViewById(R.id.saisie_image);
     
            BretourCr.setOnClickListener(new View.OnClickListener() 
            {
            	public void onClick(View v) 
            	{
            		retour();
            	}
            });
     
     
            BvaliderCr.setOnClickListener(new View.OnClickListener() 
            {
            	public void onClick(View v) 
            	{
            		validerCr();
            	}
            });
            }
            catch (Exception e) {
            	System.out.println(e);
            } 
        }
        public void retour()
        {
        	// retour au menu principal
        	/*
        	Bundle objetbunble = new Bundle();
    		Intent intent = new Intent(Ecran_creation.this, NoresiActivity.class);
    		intent.putExtras(objetbunble);
    		startActivity(intent);
    		*/
        	this.closeContextMenu();
        }
     
        public void validerCr()
        {
        	// TEST !
        	/****************************
            * Mise à jour position *
            ***************************/
        	try {
        	LocationListener onLocationChange = new LocationListener() {
        	   public void onLocationChanged(Location loc) {
        		double lat = loc.getLatitude();
        		double lon = loc.getLongitude();
        		System.out.println("latitude :" + lat + "\n" + "longitude :" + lon );
        	   } 	
     
        	   public void onProviderDisabled(String provider) {}
        	   public void onProviderEnabled(String provider) {}
        	   public void onStatusChanged(String provider, int status, Bundle extras) {}
     
        	};
     
        	LocationManager locationManager = (LocationManager)getSystemService( Context.LOCATION_SERVICE );
    		Criteria criteria = new Criteria();
    		criteria.setAccuracy( Criteria.ACCURACY_COARSE );
    		String provider = locationManager.getBestProvider( criteria, true );
     
    		if ( provider == null ) {
    			System.out.println("Problème");
    			return;
    		}
    		Location lastLocation = locationManager.getLastKnownLocation(provider);
        	double latitude = lastLocation.getLatitude();
        	double longitude = lastLocation.getLongitude();
     
        	System.out.println("latitude2 :" + latitude + "\n" + "longitude2 :" + longitude );
        	}
        	catch (Exception e) {
            	System.out.println("Echec :" + e);
        	}
        }
    	public void onLocationChanged(Location arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	public void onProviderDisabled(String provider) {
    		// TODO Auto-generated method stub
     
    	}
     
    	public void onProviderEnabled(String provider) {
    		// TODO Auto-generated method stub
     
    	}
     
    	public void onStatusChanged(String provider, int status, Bundle extras) {
    		// TODO Auto-generated method stub
     
    	}
     
    }
    Donc, normalement, au moment de cliquer sur Valider, le code est censé me récupérer les coordonnées GPS (latitude + longitude) puis me les afficher dans la console.
    Or, le seul message que j'ai est un :
    java.lang.NullPointerException
    Franchement, j'avoue que je comprends pas la.
    Mon code est surement (très) bordélique, mais techniquement il ne doit faire que ça.

    Si quelqu'un a déjà réussi à faire fonctionner tout ce bazar, même avec une autre technique, je suis preneur.

    Je suis sous la dernière version d'éclipse avec le SDK version 15.

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    catch (Exception e) {
            	System.out.println(e);
            }
    cela devrait être interdit en java....

    D'abord parce que le system.out on ne sait jamais trop bien à quoi ça correspond (surtout sur un téléphone)
    Ensuite on perd toutes les informations capitales de l'exception (StackTrace)
    Puis on perd entièrement *toutes* les exceptions (certaines sont peut-être valables à conserver)
    Pour finir, le système met à notre disposition un système de Log très utile, visible depuis le DDMS facilement (donc dans eclipse) et stocké *aussi* sur le téléphone (en cas de crash sans connexion à eclipse).
    D'ailleurs il y a un "System.out.println("probleme"); return;" dans le code ! Ce qui veut dire que l'appelant de la fonction n'a aucun moyen de savoir si tout s'est bien passé ou non...

    Je suggère toujours de commencer par ne *jamais* faire de try/catch... et commencer, une fois le code bien fini de rajouter ceux nécessaires (et uniquement) afin de "traduire" une exception (par exemple une IOException en "FileNotFoundException"), ou afficher un message à l'utilisateur.. ou encore de l'oublier si l'erreur est récupérable (warning).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.e("MonAppli","J'ai un problême pour faire ...",e);
    Et comme par magie, on saura ce qui crash, ou, qui le fait crasher etc...

    Pour finir, je vous conseille de modifier eclipse pour ne jamais utiliser de tabulations mais des espaces (par exemple 4 espaces)... Cela évite dans d'autres éditeurs de fichier (comme ici) d'avoir les indentations complètement farfelues...

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    Merci pour tes infos.

    Le system.println sert simplement à afficher dans la console pour des tests.

    J'ai donc utiliser le Log.e et ça me donne =>

    Nom : erreur.png
Affichages : 1549
Taille : 37,2 Ko

    Voici la ligne 134 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double latitude = lastLocation.getLatitude();
    Honnêtement, ça m'aide pas des masses.
    ça te dit quelque chose ? y a un autre endroit ou on peut avoir des infos plus détaillées ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Si... ça dit que lastLocation est null

    Ce qui veut dire, qu'il n'y a pas dans le systeme de "last known location" avec la précision demandée.... ou que le provider en question est "disabled", comme indiqué dans la documentation:
    http://developer.android.com/referen...va.lang.String)


    Le system.println sert simplement à afficher dans la console pour des tests.
    C'est aussi ce que fait le Log de manière plus efficace (on peut filtrer par "tag": le premier paramètre, et par niveau: info, debug, trace, warning, error...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.i("CrManagement","La nouvelle localisation est: "+lastLocation);
    Fera aussi bien que System.out, sauf que ca ira dans le log-cat... avec une date, un numéro de process, le tag, ... (et ca affiche la stack des erreurs si on passe l'exception en dernier paramètre bien entendu).

Discussions similaires

  1. [Google Maps] Récupérer la latitude et la longitude et affectation à un formulaire
    Par Msysteme dans le forum APIs Google
    Réponses: 2
    Dernier message: 30/05/2014, 22h18
  2. [Google Maps] Récupérer la latitude et la longitude sur une map
    Par Msysteme dans le forum APIs Google
    Réponses: 4
    Dernier message: 28/05/2014, 22h13
  3. récupérer la latitude et la longitude d'un clic
    Par v_malien dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 13/11/2012, 18h57
  4. récupérer la latitude et la longitude d'un clic
    Par akene dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 12/09/2009, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo