web-dev-qa-db-fra.com

Obtenir le nom de rue de l'objet Address/Location dans Android

J'essaie d'obtenir le nom de la rue de mon emplacement actuel, mais je n'arrive pas à le comprendre.

J'utilise cette méthode pour récupérer l'adresse:

public Address getAddressForLocation(Context context, Location location) throws IOException {

        if (location == null) {
            return null;
        }
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        int maxResults = 1;

        Geocoder gc = new Geocoder(context, Locale.getDefault());
        List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults);

        if (addresses.size() == 1) {
            return addresses.get(0);
        } else {
            return null;
        }
    }

Et puis je peux faire des choses comme. address.getLocality() et address.getPostalCode()

Mais ce que je veux, c'est le nom de la rue. Comme dans "Potterstreet 12". Lorsque j'imprime AddressLine (0) et AddressLine (1), je ne reçois que le code postal, la ville et le pays.

Comment puis-je récupérer le nom de rue de la position dans laquelle je suis actuellement?

16
Galip

Avez-vous essayé d'utiliser getAddressLine? Voir ici pour plus d’informations sur cette méthode

Quelque chose comme ça devrait faire (non testé):

for (int i = 0; i < addresses.getMaxAddressLineIndex(); i++) {
 Log.d("=Adress=",addresses.getAddressLine(i));
}
14
ccheneson

Essayez quelque chose comme ça dans votre code

String cityName=null;              
Geocoder gcd = new Geocoder(getBaseContext(),Locale.getDefault());               
List<Address>  addresses;    
try {    
   addresses = gcd.getFromLocation(location.getLatitude(), location  
                   .getLongitude(), 1);    
   if (addresses.size() > 0) 
        StreetName=addresses.get(0).getThoroughfare();
        String s = longitude+"\n"+latitude +  
        "\n\nMy Currrent Street is: "+StreetName; 
         Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();

ça marche pour moi :-) Bonne chance ;-)

9
user2896152

getFromLocation ne fonctionnait pas pour moi non plus. Vous pouvez prendre quelques mesures. 

1. Tout d’abord, allez dans Gradle et assurez-vous d’utiliser la dernière version des services de jeu lib.

2. Ne spécifiez pas trop, la raison pour laquelle je n’ai obtenu aucun résultat est que j’avais trop d’informations dans mon adresse. Quand j'ai enlevé le code postal, j'ai eu des résultats à chaque fois.

3. Essayez l’API en ligne: http://maps.google.com/maps/api/geocode/json?address=192%20McEwan%20Dr%20E,%20Caledon,%20ON&sensor=false Remplacez simplement l'adresse par la votre. 

Bonne chance

1
mossman252

Si vous avez une adresse complète (ville + rue), à 

address.getAddressLine(0)

vous trouvez le nom et le numéro de la rue.

1
Umberto

J'ai eu un problème très similaire mais avec le nom du pays, c'est la fonction que j'ai finalement utilisée: 

function getCountry(results) {
    var geocoderAddressComponent,addressComponentTypes,address;
    for (var i in results) {
      geocoderAddressComponent = results[i].address_components;
      for (var j in geocoderAddressComponent) {
        address = geocoderAddressComponent[j];
        addressComponentTypes = geocoderAddressComponent[j].types;
        for (var k in addressComponentTypes) {
          if (addressComponentTypes[k] == 'country') {
            return address.long_name;
          }
        }
      }
    }
   return 'Unknown';
 }

Vous devriez pouvoir adapter cela pour obtenir le nom de la rue sans faire d'histoires. 

Inspiré par cette réponse

0
jsims281