Aller au contenu

[resolu]Problème avec geocoder


Landroid

Recommended Posts

Bonsoir,

Le code se compile bien mais le programme m'affiche les coordonnées GPS, or il est censé me donner les infos sur le lieu, ce qui signifie que cette ligne me revois zero :

List adresses = gc.getFromLocation(latitude,longitude,5);

Je ne comprends pas bien pourquoi, une idée ?

Voici le code :

package com.android.wtt;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
//import android.widget.Toast;
import android.location.Geocoder;
import android.location.Address ;
import java.util.Locale;
//import java.lang.Double;
import java.util.List; 
import java.io.IOException;


public class main extends Activity {
   private LocationManager objgps;
   private LocationListener objlistener;
   //private Address myAddress;
   private TextView mTxtViewlong;
   private TextView mTxtViewlat;
   double latitude ;
   double longitude ;
   Geocoder gc;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       //---utilisation  de la class LocationManager pour le gps---
       objgps = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
       //*************ecouteur ou listener*********************
       objlistener = new Myobjlistener();
       objgps.requestLocationUpdates(
           LocationManager.GPS_PROVIDER,
           0,
           0,
           objlistener);
       gc = new Geocoder(getApplicationContext(),Locale.getDefault());
       //mTxtViewlat.setText(" "+myAddress.getPostalCode());
       //**variable qui pointe sur  mes champs d'affichage*************
       mTxtViewlong = (TextView) findViewById(R.id.textlong);
       mTxtViewlat = (TextView) findViewById(R.id.textlat);
   }
   private class Myobjlistener implements LocationListener
   {
       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
       }
         public void onLocationChanged(Location location) {
                    //affichage des valeurs dans la les zone de saisie
                    mTxtViewlat.setText(" "+location.getLatitude());
                    mTxtViewlong.setText(" "+location.getLongitude());

                    try {

                          List adresses = gc.getFromLocation(location.getLatitude(),location.getLongitude(),1);
                          StringBuilder sb = new StringBuilder();

                          if(adresses.size()>0)
                           {

                              Address myAddresses = adresses.get(0);

                              for(int i=0;i
                              {
                                  sb.append(myAddresses.getAddressLine(i)).append("\n");
                                  sb.append(myAddresses.getCountryName()).append("\n");
                                  sb.append(myAddresses.getCountryCode()).append("\n");
                                  sb.append(myAddresses.getPostalCode());
                              }
                              String addressstring = sb.toString();
                              mTxtViewlat.setText(addressstring);
                           }

                    }
                    catch (IOException e) {
                        // TODO Auto-generated catch block
                        mTxtViewlat.setText("erreur :"+e);
                        mTxtViewlong.setText("erreur :"+e);
                    }
         }
   }
}

Modifié par Landroid
Lien vers le commentaire
Partager sur d’autres sites

1) C'est bizarre de passer par une Location, de la mettre dans un textview et ensuite de récupérer le textview, le retransformer en String, le convertir en location et le mettre dans ton gc.getFromLocation, ca pique un peu....

2) nettoie ton code et fais directement

geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);

Lien vers le commentaire
Partager sur d’autres sites

Oui, je comptais l'arranger plus tard car je ne pense pas que ça vienne de là mais je vais esseyer quand même.

Je l'ai laissé surtout parce que ça m'arrangeais pour debuguer, j'ai au moins situé l'erreur.

Aussi je virerais le second textview qui ne me sert à rien (en fait j'esseye de mettre la meme chose dans 2 textview, ça pique un peu aussi mais c'est provisoire)

Je vais donc lancer un debug pour voir ce que me revoit la fonction getlocationfrom, elle ne retourne peut etre pas zero comme je l'ai dit mais -1 ou un autre code d'erreur que je saurais peut etre interpreter. j'ai deja utilisé un peu le debug en C++ sur VisualStudio il y quelques annees mais je n'ai pas encore esseyé sous Eclipse.

Ces derniers temps je codais plutot en Python, j'etais presque devenu un oisif du codage mais là ça chauffe dans le ciboulot, avec tous ces types, toutes ces classes, ... :-D

Modifié par Landroid
Lien vers le commentaire
Partager sur d’autres sites

Voilà j'ai arrangé le code puis edité.

Donc getfromlocalisation() ne renvoit pas d'erreur de connection ou autre, il renvoit bien une liste d'adresses vides.

J'ai esseyé avec divrers fix geo :

10 10

15 15

42 42

35 15

40 20...

Mais je pense que la fonction renverrait tout de meme un truc meme si j'etais pas sur un point "lieu" non ?

C'est donc assez difficile à debuguer, je peux rentrer dans cette fonction pour voir ce qu'il se passe avec le debugueur ?

Lien vers le commentaire
Partager sur d’autres sites

Je viens d'essayer ce code, ca m'emmène au Tchad à Bar azhoum et tout fonctionne!

C'est donc tes coordonnées GPS qui sont pas bonnes, ton code est bon.

        Geocoder geocoder = new Geocoder(this, Locale.getDefault());
       List addresses=null;
       try {
           addresses = geocoder.getFromLocation(10, 20, 1);
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }


       StringBuilder sb = new StringBuilder();
       Toast.makeText(context,addresses.toString(),Toast.LENGTH_LONG).show(); 
       if(addresses.size()>0)
        {

           Address myAddresses = addresses.get(0);

           for(int i=0;i
           {
               sb.append(myAddresses.getAddressLine(i)).append("\n");
               sb.append(myAddresses.getCountryName()).append("\n");
               sb.append(myAddresses.getCountryCode()).append("\n");
               sb.append(myAddresses.getPostalCode());
           }
           String addressstring = sb.toString();
           Toast.makeText(context,addressstring,Toast.LENGTH_LONG).show(); 

Lien vers le commentaire
Partager sur d’autres sites

Vraiment ?! Comment celà se peut-il ?

Les valeurs s'affichent bien pourtant ? Ou alors il faut vraiment mettre des coordonnées très précises ?

Tu as esseyé sur emulateur ? Tu as mis quelles coordonnées dans geo fix ? Ah je vois que tu as remodelé pas mal le code quand même... 10,20 donc c'est ok mais si je mets manuellement 10 20 moi ça ne donne rien. Ca ne viens donc pas des coordonnées, je pense que ça viens de la connection vers internet.

Autre chose : j'ai remarqué que le clavier est en Chinois, c'est normal ?

voici mon manifest avec la permission :

<?xml version="1.0" encoding="utf-8"?>
     package="com.android.wtt"
     android:versionCode="1"
     android:versionName="1.0">


                 android:label="@string/app_name">











Modifié par Landroid
Lien vers le commentaire
Partager sur d’autres sites

Je l'ai mis dans le oncreate() sur un device.

J'ai jamais utilisé le GPS donc je sais pas comment ca marche, mais un truc dont je suis convaincu, c'est que le "onLocationChanged" n'est jamais appelé dans ton code.

Mets le dans ole oncreate comme moi et essaye un code pas par pas au lieu de vouloir faire le sauvage!

Utilises aussi les commandes Log.i("mon programme","ceci est un test") pour le débug.

Lien vers le commentaire
Partager sur d’autres sites

Mets le dans ole oncreate comme moi et essaye un code pas par pas au lieu de vouloir faire le sauvage!

C'est bizare, en general c'est moi qui dis ça aux autres parceque je travaille tres lentement et souvant je teste lignes par lignes :-D

Je l'ai mis dans le oncreate() sur un device.

Sur un device ? c'est à dire ?

J'ai jamais utilisé le GPS donc je sais pas comment ca marche, mais un truc dont je suis convaincu, c'est que le "onLocationChanged" n'est jamais appelé dans ton code.

Sisi :-)

Cette methode est appelée à chaque fois que je simule une nouvelle position avec geo fix :-)

Utilises aussi les commandes Log.i("mon programme","ceci est un test") pour le débug.

Connais pas mais je vais voir

Sinon j'ai esseyé ton code directement dans le oncreate et ça ne passait pas : il ne veut pas compilet la ligne ou il y a le getfromlocation car il releve une ioexeption.

Mais je vais esseyer de simplifier au maximum pour voir, c'est vrai que ça fonctionne toujours au pas à pas mais comme là je travaillais sur un tuto j'ai voulu jouer un peu aux legos.

edit:

Je viens d'esseyer avec ton code apres avoir remplacé "context" par getApplicationContext() dans les toasts, ça a compilé, ca s'est lancé et le toast m'affiche ça :

[]

Modifié par Landroid
Lien vers le commentaire
Partager sur d’autres sites

quand je dis sur un device, je voulais dire sur un téléphone.. désolé de m'être mal exprimé.

Bien en tous cas, je comprends pas, le code que je t'ai envoyé est quand même simplifié au possible, il n'y a plus aucune variable et rien de complexe, je pose les armes.

J'essayerai demain sur l'émulateur parceque là, je vois que lui qui bloque....

Lien vers le commentaire
Partager sur d’autres sites

Effectivement le code plante sur l'émulateur :P

Le plaisir du développeur qui perd son temps pour une connerie ;-)

Edit:

bon, bien sachant que ca plante sur l'émulateur une recherche Google me donne:

http://code.google.com/p/android/issues/detail?id=8929

http://osdir.com/ml/Android-Developers/2009-11/msg02281.html

Solution peut-être ici, mais je sais pas trop traduire:

The google API doc says Geocoder is a mock-up in m5 SDK.

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres sites

Super ! (enfin domage pour l'emulateur 2.2) mais merci beaucoup ! J'ai vraiment pas de chance de me bloquer comme ça dès le début mais je suis content que ce ne soit pas ma faute :-)

C'est sympa de ta part d'avoir fait les tests, je n'ai pas pensé une seconde que ça pouvait venir de là.

Encore merci, à bientot :-)

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...