我正在制作的应用程序的一部分需要谷歌地图。我希望用户能够在edittext中输入一些搜索字符串,然后按下搜索按钮,地图将动画显示第一个结果。
当我按下按钮时,应用程序会搜索并获取第一个结果并将其放入地理位置,以便该程序的一部分正常工作。但是当我尝试动画到那一点时,应用程序崩溃了。
这是onCreate功能,我成功导航到“Dalvík,Iceland”。
public class LocationPicker extends MapActivity {
static GeoPoint point;
static MapController mc;
static MapView mapView;
private EditText location;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_picker);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
location = (EditText)findViewById(R.id.locationString);
mc = mapView.getController();
String tmp = "Dalvík, Iceland";
try {
point = searchLocation(tmp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mc.animateTo(point);
mc.setZoom(14);
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
我点击按钮的代码是,并且要清楚System.out.println(point)打印有效点。但是当我点击按钮时,我的应用程序崩溃了。
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();
}
}
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;
}
}
因此,为了总结,我在onclick“搜索”功能中显然做错了。
任何想法有什么不对?
答案 0 :(得分:0)
您没有检查正确的变量是否为空值:
if( point != null){
mc.animateTo(tmpPoint);
mapView.invalidate();
}
应该是
if( tmpPoint!= null){
mc.animateTo(tmpPoint);
mapView.invalidate();
}
另外,您希望在UI线程之外调用geoCoder.getFromLocationName
方法,因为这可能是时间的消耗。例如,使用AsyncTask
。
最后,即使您获得了地址列表,也不能保证它们具有纬度和经度。使用hasLatitude
和hasLongitude
函数选择带坐标的结果列表的第一个地址。
答案 1 :(得分:0)
我找到了答案。
造成这种情况的问题是这一行
mapView.invalidate();