【问题标题】:Can GeoCoder getFromLocation method cause a NetworkOnMainThreadException to be thrown?GeoCoder getFromLocation 方法会导致抛出 NetworkOnMainThreadException 吗?
【发布时间】:2012-04-11 05:16:00
【问题描述】:

我有一个经过彻底测试的应用程序,在 Android Gingerbread(和较旧的 Android 版本)上运行良好。我从用户报告的崩溃错误中注意到,运行更高版本的 Android 操作系统的手机会抛出 NetworkOnMainThreadException

我正在尝试处理我的代码并消除/修复所有罪魁祸首。如果从 main/ui 线程调用 GeoCoder getFromLocationgetFromLocationName 方法会抛出 NetworkOnMainThreadException 吗?

【问题讨论】:

    标签: android android-maps android-networking android-3.0-honeycomb


    【解决方案1】:

    似乎这些Geocoder 方法和任何 网络或i/o 调用都会抛出NetworkOnMainThreadException。因此,如果有疑问,请将其放在单独的线程中!

    下面是如何从另一个线程调用GeoCoder.getFromLocation() 方法的示例:

    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);
    

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 2012-12-28
      • 1970-01-01
      • 2022-12-07
      • 2014-04-12
      • 1970-01-01
      • 2016-01-06
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多