Ich versuche, eine Adresse basierend auf dem langen/lat zu erhalten. es scheint, dass so etwas funktionieren sollte?
Geocoder myLocation = Geocoder(Locale.getDefault());
List myList = myLocation.getFromLocation(latPoint,lngPoint,1);
Das Problem ist, dass ich immer wieder bekomme: Die Methode Geocoder (Locale) ist für den Typ savemaplocation nicht definiert
Jede Hilfe wäre hilfreich. Danke.
Danke, ich habe zuerst den Kontext, das Gebietsschema 1, ausprobiert, und das ist fehlgeschlagen, und ich habe mir einige der anderen Konstruktoren angesehen (ich hatte einen gesehen, der nur das Gebietsschema erwähnt hatte). Trotzdem,
Es hat nicht funktioniert, da ich immer noch bekomme: Die Methode Geocoder (Context, Locale) ist für den Typ savemaplocation nicht definiert
Ich habe: import android.location.Geocoder;
Das folgende Code-Snippet erledigt dies für mich (lat und lng sind Doubles, die über diesem Bit deklariert sind):
Ich habe das auch versucht, jedes Mal, wenn ich versuche, die Adressliste anzuzeigen, bombardiert es. Nicht sicher, was los ist. Ich werde es in ein oder zwei Tagen mit einer neuen App hier versuchen, um zu sehen, was ich finden kann.
… außerdem habe ich die folgenden zwei Berechtigungen in meinem Manifest: Als ich einen davon verpasst habe (ich kann mich nicht erinnern, welcher), hat die App einen wirklich nicht hilfreichen Fehler ausgegeben.
– Wilfried Knievel
29. Januar 2009 um 17:39 Uhr
Wie kann ich dieser Klasse einen API-Schlüssel hinzufügen? Damit ich mehr Anfragen bekommen kann?
– Olsi Saqe
20. Mai 2014 um 15:44 Uhr
Haben wir im Jahr 2019 (api>= 26 SDK) eine Möglichkeit, eine Adresse zu erhalten, ohne den Kontext zu übergeben?
– Ponomarenko Oleh
27. Februar 2019 um 13:58 Uhr
Hier ist ein vollständiger Beispielcode, der einen Thread und einen Handler verwendet, um die Geocoder-Antwort zu erhalten, ohne die Benutzeroberfläche zu blockieren.
Geocoder-Aufrufprozedur, kann sich in einer Hilfsklasse befinden
public static void getAddressFromLocation(
final Location location, final Context context, final Handler handler) {
Thread thread = new Thread() {
@Override public void run() {
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> list = geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 1);
if (list != null && list.size() > 0) {
Address address = list.get(0);
// sending back first address line and locality
result = address.getAddressLine(0) + ", " + address.getLocality();
}
} catch (IOException e) {
Log.e(TAG, "Impossible to connect to Geocoder", e);
} finally {
Message msg = Message.obtain();
msg.setTarget(handler);
if (result != null) {
msg.what = 1;
Bundle bundle = new Bundle();
bundle.putString("address", result);
msg.setData(bundle);
} else
msg.what = 0;
msg.sendToTarget();
}
}
};
thread.start();
}
Hier ist der Aufruf dieser Geocoder-Prozedur in Ihrer UI-Aktivität:
getAddressFromLocation(mLastKownLocation, this, new GeocoderHandler());
Und der Handler, um die Ergebnisse in Ihrer Benutzeroberfläche anzuzeigen:
private class GeocoderHandler extends Handler {
@Override
public void handleMessage(Message message) {
String result;
switch (message.what) {
case 1:
Bundle bundle = message.getData();
result = bundle.getString("address");
break;
default:
result = null;
}
// replace by what you need to do
myLabel.setText(result);
}
}
Vergessen Sie nicht, die folgende Berechtigung in Ihre einzufügen Manifest.xml
Der Code funktioniert einwandfrei, eine großartige Basis, um ihn weiter anzupassen
– John
20. Februar 2014 um 18:57 Uhr
Dies ist richtig, ein anderes Android wird durchkommen NetworkOnMainThreadException.Alternativ kann man auch eine einfachere verwenden AsyncTask um dies zu tun
– Nezam
3. Mai 2014 um 8:18 Uhr
Umgekehrt geocodierte Adresse wird mehrmals angezeigt. Ich weiß nicht warum?
– Vineeth Kuttipurath kottayodan
21. Juli 2017 um 8:31 Uhr
@VineethKuttipurathkottayodan Wenn dieselbe Adresse mehrmals vorkommt, liegt das daran, dass Sie die Funktion getAddressFromLocation in die Funktion onLocationChanged eingefügt haben
– Codierer
29. September 2017 um 7:46 Uhr
Reto Meier
Es sieht so aus, als würden hier zwei Dinge passieren.
1) Du hast das verpasst new Schlüsselwort vor dem Aufruf des Konstruktors.
2) Der Parameter, den Sie an den Geocoder-Konstruktor übergeben, ist falsch. Sie fahren in a vorbei Locale wo es erwartet a Context.
Es gibt zwei Geocoder Konstruktoren, die beide eine erfordern Contextund man nimmt auch a Locale:
Wenn Sie weiterhin Probleme haben, kann es sich um ein Berechtigungsproblem handeln. Die Geocodierung verwendet implizit das Internet, um die Suchen durchzuführen, daher erfordert Ihre Anwendung eine INTERNET uses-permission-Tag in Ihrem Manifest.
Fügen Sie den folgenden uses-permission-Knoten innerhalb der manifest Knoten Ihres Manifests.
Danke, ich glaube, ich habe letzte Nacht zu spät gearbeitet, nicht sicher, was mit meinem Neuen passiert ist. Ich glaube, ich habe es ursprünglich vergessen, habe es wieder angelegt, als ich nur mein Gebietsschema hatte, und als ich zurückkam, habe ich es wieder vergessen. Ich weiß es zu schätzen.
– Chrispix
23. Januar 2009 um 16:44 Uhr
Keine Sorge, ich habe es beim ersten Mal auch nicht bemerkt 🙂
– Reto Meier
23. Januar 2009 um 16:58 Uhr
Ingo
Grund dafür ist der nicht vorhandene Backend Service:
Die Geocoder-Klasse erfordert einen Back-End-Dienst, der nicht im Core-Android-Framework enthalten ist. Die Geocoder-Abfragemethoden geben eine leere Liste zurück, wenn kein Back-End-Dienst auf der Plattform vorhanden ist.
Antonius
Rufen Sie zunächst Breiten- und Längengrad mithilfe der Klassen Location und LocationManager ab. Probieren Sie jetzt den folgenden Code aus, um die Stadt und die Adressinformationen abzurufen
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(lat, lng, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getLocality()).append("\n");
sb.append(address.getPostalCode()).append("\n");
sb.append(address.getCountryName());
}
Stadtinfo ist jetzt in sb. Konvertieren Sie nun sb in String (mithilfe von sb.toString() ).
Adil Soomro
Nun, ich bin immer noch ratlos. Hier ist also mehr Code.
Bevor ich meine Karte verlasse, rufe ich an SaveLocation(myMapView,myMapController); Das nennt man schließlich meine Geokodierungsinformationen.
Aber seit getFromLocation kann ein werfen IOExceptionmusste ich Folgendes tun, um SaveLocation aufzurufen