Can GeoCoder getFromLocation method cause a NetworkOnMainThreadException to be thrown?

后端 未结 1 1361
遇见更好的自我
遇见更好的自我 2021-01-22 13:43

I have an app which was tested thoroughly and working fine on Android Gingerbread (and older Android versions). I\'ve noticed from users\' reported crash errors that phones runn

相关标签:
1条回答
  • 2021-01-22 13:58

    Seems like these Geocoder methods and any networking or i/o calls are going to throw up a NetworkOnMainThreadException. So, if in doubt, stick it in a separate thread!

    Here's an example of how to call the GeoCoder.getFromLocation() method from another thread:

    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);
    
    0 讨论(0)
提交回复
热议问题