Android Can';t单击按钮时将动画设置为有效的地质点
我正在制作的应用程序的一部分需要谷歌地图。我希望用户能够在edittext中键入一些搜索字符串,然后按下搜索按钮,地图将动画显示为第一个结果 当我按下按钮时,应用程序将搜索并获取第一个结果,并将其放入一个地质点,这样程序的一部分就可以工作了。但是当我尝试设置动画到那个点时,应用程序崩溃了Android Can';t单击按钮时将动画设置为有效的地质点,android,android-mapview,geopoints,Android,Android Mapview,Geopoints,我正在制作的应用程序的一部分需要谷歌地图。我希望用户能够在edittext中键入一些搜索字符串,然后按下搜索按钮,地图将动画显示为第一个结果 当我按下按钮时,应用程序将搜索并获取第一个结果,并将其放入一个地质点,这样程序的一部分就可以工作了。但是当我尝试设置动画到那个点时,应用程序崩溃了 public void search(View v) throws IOException{ GeoPoint tmpPoint = searchLocation(location.getTex
public void search(View v) throws IOException{
GeoPoint tmpPoint = searchLocation(location.getText().toString());
System.out.println(tmpPoint);
if( tmpPoint != null){
mc.animateTo(tmpPoint);
mapView.invalidate();
}
}
这里是onCreate函数,我在其中成功导航到位置“Dalvík,冰岛”
searchLocation功能如下所示:
public GeoPoint searchLocation (String searchString) throws IOException{
Geocoder geo = new Geocoder(this);
List<Address> addr;
addr = geo.getFromLocationName(searchString, 10);
if(!addr.isEmpty()){
Address loc = addr.get(0);
GeoPoint point = new GeoPoint((int) (loc.getLatitude() * 1E6),
(int) (loc.getLongitude() * 1E6));
return point;
}
else {
return null;
}
}
public GeoPoint searchLocation(字符串searchString)引发IOException{
地理编码器geo=新地理编码器(本);
列表地址;
addr=geo.getFromLocationName(searchString,10);
如果(!addr.isEmpty()){
地址loc=地址get(0);
地质点=新的地质点((int)(位置getLatitude()*1E6),
(int)(loc.getLongitude()*1E6));
返回点;
}
否则{
返回null;
}
}
总之,我在onclick“search”函数中显然做错了什么
有什么问题吗?您没有检查正确的变量的空值:
if( point != null){
mc.animateTo(tmpPoint);
mapView.invalidate();
}
应该是
if( tmpPoint!= null){
mc.animateTo(tmpPoint);
mapView.invalidate();
}
另外,您希望在UI线程之外调用geoCoder.getFromLocationName
方法,因为这可能会耗费时间。例如,使用AsyncTask
最后,即使您得到一个地址列表,也不能保证它们有纬度和经度。使用hasLatitude
和hasLatitude
函数选择结果列表中带有坐标的第一个地址。我找到了答案
造成这种情况的问题是这条线
mapView.invalidate() 实际上,我只是更改了变量的名称,使之与现有的变量点不冲突。我做了一些调试,在那里我打印出了结果的纬度和经度,它显示了有效的点。因此,就我而言,我的tmpPoint是一个有效的地质点,但当我尝试为它设置动画时,程序仍然崩溃。
if( tmpPoint!= null){
mc.animateTo(tmpPoint);
mapView.invalidate();
}