1

Ich habe eine App, die gründlich getestet wurde und funktioniert gut auf Android Gingerbread (und ältere Android-Versionen). Ich habe gemeldete Absturzfehler von Benutzern bemerkt, dass Telefone, auf denen spätere Versionen des Android-Betriebssystems laufen, NetworkOnMainThreadException werfen.Kann die GeoCoder getFromLocation-Methode eine NetworkOnMainThreadException auslösen?

Ich versuche, durch meinen Code zu arbeiten und alle Täter zu beseitigen/zu beheben. Würden die GeoCodergetFromLocation und getFromLocationName Methoden eine NetworkOnMainThreadException werfen, wenn sie aus dem Haupt/ui-Thread aufgerufen werden?

Antwort

10

Scheint, wie diese Geocoder Methoden und jede Vernetzung oder I/O-Anrufe werden eine NetworkOnMainThreadException werfen. Also, wenn Sie Zweifel haben, stecken Sie es in einen separaten Thread!

Hier ist ein Beispiel dafür, wie die GeoCoder.getFromLocation() Verfahren von einem anderen Thread zu nennen:

new AsyncTask<GeoPoint, Void, Address>() 
{ 
    @Override 
    protected Address doInBackground(GeoPoint... geoPoints) 
    { 
    try 
    { 
     Geocoder geoCoder = new Geocoder(context); 
     double latitude = geoPoints[0].getLatitudeE6()/1E6; 
     double longitude = geoPoints[0].getLongitudeE6()/1E6; 
     List<Address> addresses = geoCoder.getFromLocation(latitude, longitude, 1); 
     if (addresses.size() > 0) 
     return addresses.get(0); 
    } 
    catch (IOException ex) 
    { 
     // log exception or do whatever you want to do with it! 
    } 
    return null; 
    } 

    @Override 
    protected void onPostExecute(Address address) 
    { 
    // do whatever you want/need to do with the address found 
    // remember to check first that it's not null 
    } 
}.execute(myGeoPoint); 
Verwandte Themen