Landroid Posted June 14, 2010 Share Posted June 14, 2010 (edited) 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); } } } } Edited June 15, 2010 by Landroid Quote Link to comment Share on other sites More sharing options...
Profete162 Posted June 14, 2010 Share Posted June 14, 2010 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); Quote Link to comment Share on other sites More sharing options...
Landroid Posted June 14, 2010 Author Share Posted June 14, 2010 (edited) 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 Edited June 14, 2010 by Landroid Quote Link to comment Share on other sites More sharing options...
Profete162 Posted June 14, 2010 Share Posted June 14, 2010 pas oublié la permission Internet? Sinon, le code simple que j'ai mis fonctionne pas non plus? Quote Link to comment Share on other sites More sharing options...
Landroid Posted June 14, 2010 Author Share Posted June 14, 2010 Non, j'y ai pensé, j'ai meme verifié si la connexion fonctionnait dans l'emulateur, ça ne viens pas de là. Quote Link to comment Share on other sites More sharing options...
Landroid Posted June 14, 2010 Author Share Posted June 14, 2010 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 ? Quote Link to comment Share on other sites More sharing options...
Profete162 Posted June 14, 2010 Share Posted June 14, 2010 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(); Quote Link to comment Share on other sites More sharing options...
Landroid Posted June 14, 2010 Author Share Posted June 14, 2010 (edited) 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"> Edited June 14, 2010 by Landroid Quote Link to comment Share on other sites More sharing options...
Profete162 Posted June 14, 2010 Share Posted June 14, 2010 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. Quote Link to comment Share on other sites More sharing options...
Landroid Posted June 15, 2010 Author Share Posted June 15, 2010 (edited) 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 : [] Edited June 15, 2010 by Landroid Quote Link to comment Share on other sites More sharing options...
Profete162 Posted June 15, 2010 Share Posted June 15, 2010 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.... Quote Link to comment Share on other sites More sharing options...
Profete162 Posted June 15, 2010 Share Posted June 15, 2010 (edited) 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. Edited June 15, 2010 by Profete162 Quote Link to comment Share on other sites More sharing options...
Profete162 Posted June 15, 2010 Share Posted June 15, 2010 Ca fonctionne donc tres bien sur un émulateur 1.5 et pas sur un 2.2 Merci Google! Quote Link to comment Share on other sites More sharing options...
Landroid Posted June 15, 2010 Author Share Posted June 15, 2010 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 :-) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.