这是我的程序的要点..当我按下按钮告诉位置时,如果地理编码器没有抛出任何异常,它会正常工作,但问题出现在地理编码器抛出异常并同时我的应用程序停止有一段时间它就像它挂起..因为进度条停止旋转......并且停止按钮也没有按下......但是在30秒或1分钟之后它打印出没有找到的地址......任何人都可以帮我解决这个问题...提前谢谢你
//这是在onCreate方法中 locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,3,this);
//分开Mehtod public void geo(double latitude,doubleitudeitude) {
if(Geocoder.isPresent())
{
try
{
Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
List<Address> listAddresses = geocoder.getFromLocation(latitude, longitude, 1);
if(null!=listAddresses&&listAddresses.size()>0)
{
Location = listAddresses.get(0).getAddressLine(0);
}
else
{
Toast.makeText(getBaseContext(), "Searching..",dur).show();
}
}
catch (Exception e)
{
//Toast.makeText(this,Location, dur).show();
Toast.makeText(getBaseContext(), "No address found",dur).show();
}
}
else
{
Toast.makeText(getApplicationContext(),"wait...",dur).show();
}
}
获取纬度和经度后,在onLocationChanged方法中调用此geo方法来获取位置。
答案 0 :(得分:0)
我认为问题在于地理编码器尝试获取您的位置(可能只是等待来自传感器或网络的响应)。您应该在单独的线程中对地理编码器执行请求以防止挂起(您可以使用AsyncTask)。但请注意,所有使用UI的工作,如显示祝酒词,都必须在主UI线程中完成(您可以使用方法runOnUiThread from Activity)
答案 1 :(得分:0)
考虑到位置服务,您每1秒实例化一次收集位置信息,使用此服务不是在UI线程中,而是在服务或线程中,这是一个很好的做法,并且遵循这些步骤是一种很好的做法:
定义最佳性能模型 基于位置的应用程序现在已经司空见惯,但由于精度低于最佳,用户移动,获取位置的多种方法以及节省电池的需求,获得用户位置变得复杂。要克服在保留电池电量的同时获得良好用户位置的障碍,您必须定义一致的模型,以指定应用程序获取用户位置的方式。此模型包括您何时开始和停止侦听更新以及何时使用缓存的位置数据。
获取用户位置的流程
以下是获取用户位置的典型流程:
- 启动应用程序。 2.稍后,开始收听来自的更新 期望的位置提供商3.维持“当前最佳估计” 过滤掉新的但不太准确的修复位置。 4.停止聆听 用于位置更新。 4.利用最后的最佳位置 估计。
醇>