我有一个地理编码器,当我在程序上放置经度和纬度时它可以工作但是当我试图从用户位置输入纬度和经度时它会强制关闭这就是我所拥有的
public String address(){
Geocoder gc = new Geocoder(this);
List<Address> list = null;
try {
list = gc.getFromLocation(latt(),longg(),1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Address address = list.get(0);
StringBuffer str = new StringBuffer();
str.append("" + address.getLocality() + "\n");
str.append("" + address.getSubAdminArea() + "\n");
str.append("" + address.getAdminArea() + "\n");
str.append("" + address.getCountryName() + "\n");
str.append("" + address.getCountryCode() + "\n");
String strAddress = str.toString();
return strAddress;
}
public double latt(){
return LocationManagerHelper.getLatitude() ;
}
public double longg(){
return LocationManagerHelper.getLongitude();
}
logcat的
10-26 20:15:11.936: E/AndroidRuntime(28800): at http.www.hotapp.com.timeandlocation.TimeAndLocationActivity.address(TimeAndLocationActivity.java:95)
第95行是地址address = list.get(0);
关于我做错什么的任何建议?
稍后问题
我的想法是,纬度和经度的数字在被拉入时会很长。所以我的问题是,无论如何要做到这样使得长和纬线以较小的数字进入?当我在程序中加入长整数时,它会使用较短的数字latitude: 43.47389
Longitude:-114.34639
。当它从用户位置拉出时,我会Latitude: 43.53400643333333
longitude: -114.32474341666666
。即使我以编程方式输入较长的数字,它仍然可以正常工作。
答案 0 :(得分:0)
由于你的应用程序在list.get(0)
崩溃,我猜它是一个NullPointerException。由于列表是在try块中启动的,并且您正在吃异常,因此查看gc.getFromLocation(latt(),longg(),1);
失败的原因可以让您更接近解决方案。
请记住,像这样的代码只能解决问题,并且以后会更难找到:
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
快速失败通常是一个很好的政策。
至于gc.getFromLocation(latt(),longg(),1);
失败的原因,文档说“如果网络不可用或发生任何其他I / O问题,则发生IOException”。网络设置正确吗?您运行此设备的设备是否具有适当的GeoCoding服务? 模拟器没有。