我有这个代码,它应该可以工作但是当我调用它来获取地址时它会停止我的应用程序,这是我的代码:
public String getLocation()
{
String address = "";
if(loc!=null)
{
try
{
Address ads = geo.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1).get(0);
address+= ads.getAddressLine(0)+", ";
if(ads.getAdminArea()!=null)
{
address+= ads.getAdminArea()+", ";
}
else if(ads.getLocality()!=null)
{
address+= ads.getLocality()+", ";
}
address+= ads.getCountryName()+".";
}
catch(IOException IOex)
{
address = " las coordenadas en el siguiente link. Estoy sin internet";
}
address += " http://maps.google.com/?q="+loc.getLatitude()+","+loc.getLongitude();
return address;
}
else
{
return "/";
}
}
我有这个代码在另一个应用程序上工作,我不知道这里发生了什么,如果有人能帮助我,我真的很感激。
答案 0 :(得分:0)
首先,查看Eclipse的日志或您当前使用的任何其他内容。 从日志中读取错误很容易 - 尤其是当它为NULL时。
其次,我对这段代码有些怀疑。
我认为getAddressLine和getCountryName是NULL,因为地址无法解码。 请检查一下。 你可以做System.out.println(“something”);将信息打印到控制台。
第三: 也许 geo 不是初学者?不仅如此:Geocoder geo,但Geocoder geo = new Geocoder(currentContext);
最后一个提示,地理编码事情应该作为ASyncTask完成 - 因为它(ASyncTask)总是启动新线程而不是冻结UI线程。
这里有一些没有实现ASync的例子,但与你的代码非常相似:
public class GeocodingTasks {
private Context appContext;
private Geocoder coder;
public GeocodingTasks(Context c) {
this.appContext = c;
this.coder = new Geocoder(c);
}
public Location getLocationFromAddress(String enteredAddress){
List<Address> address;
Location currentlyAdding = new Location(enteredAddress);
try {
address = coder.getFromLocationName(enteredAddress,1);
if (address != null && address.size() > 0) {
Address currentLocation = address.get(0);
currentlyAdding.setLatitude(currentLocation.getLatitude());
currentlyAdding.setLongitude(currentLocation.getLongitude());
Toast.makeText(appContext,
"You have added place: " + enteredAddress,
Toast.LENGTH_SHORT)
.show();
return currentlyAdding;
}
} catch (Exception e) { e.printStackTrace();
} finally {}
return null;
}}