android - GeoCoder getFromLocation 方法会导致抛出 NetworkOnMainThreadException 吗?

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

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

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

最佳答案

似乎这些 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);

关于android - GeoCoder getFromLocation 方法会导致抛出 NetworkOnMainThreadException 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893520/

相关文章:

java - 将 "Native Advanced Ads"放入弹出窗口关闭

Java - 极坐标。给定一条线段 AB 和一个点 P,找到极线 AB 上最接近点 P 的点

android - 操作栏选项卡中的 MapFragment

android - 在 Android 中将大量叠加层加载到 MapView 的最佳方法是什么?

android - 如何确定Android中的Wifi,3G,4G(LTE)和VPN是哪个网络接口(interface)?

android - Android/iOS 上的蓝牙游戏

Android,变音符号不敏感 SQLite 搜索

android - 使用 findViewById 方法时出错

java - 在点之间绘制路径

android - wpa_supplicant 是针对 android 设备特定的还是特定于 android 版本的?