Android Can';t单击按钮时将动画设置为有效的地质点

Android Can';t单击按钮时将动画设置为有效的地质点,android,android-mapview,geopoints,Android,Android Mapview,Geopoints,我正在制作的应用程序的一部分需要谷歌地图。我希望用户能够在edittext中键入一些搜索字符串,然后按下搜索按钮,地图将动画显示为第一个结果 当我按下按钮时,应用程序将搜索并获取第一个结果,并将其放入一个地质点,这样程序的一部分就可以工作了。但是当我尝试设置动画到那个点时,应用程序崩溃了 public void search(View v) throws IOException{ GeoPoint tmpPoint = searchLocation(location.getTex

我正在制作的应用程序的一部分需要谷歌地图。我希望用户能够在edittext中键入一些搜索字符串,然后按下搜索按钮,地图将动画显示为第一个结果

当我按下按钮时,应用程序将搜索并获取第一个结果,并将其放入一个地质点,这样程序的一部分就可以工作了。但是当我尝试设置动画到那个点时,应用程序崩溃了

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();
    }