android-GeoCoder getFromLocation方法可以引发NetworkOnMainThreadException吗?
作者:互联网
我有一个经过全面测试的应用程序,并且可以在Android Gingerbread(和较旧的Android版本)上正常工作.我已经从用户报告的崩溃错误中注意到,运行更高版本的Android操作系统的手机正在抛出NetworkOnMainThreadException.
我试图通过我的代码,消除/修复所有的罪魁祸首.如果从主线程/用户界面线程调用,则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-networking,android-maps,android,android-3-0-honeycomb 来源: https://codeday.me/bug/20191012/1902895.html