我有一个应用经过全面测试,在 Android Gingerbread(和旧的 Android 版本)上运行良好。我从用户报告的崩溃错误中注意到,运行更高版本 Android 操作系统的手机会抛出 NetworkOnMainThreadException
。
我正在尝试处理我的代码并消除/修复所有罪魁祸首。如果从主/ui 线程调用,GeoCoder
getFromLocation
和 getFromLocationName
方法会抛出 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/