私が作成しているアプリケーションの一部には、グーグルマップが必要です。ユーザーが編集テキストに検索文字列を入力してから検索ボタンを押すと、マップが最初の結果にアニメーション化されるようにしたいと思います。
ボタンを押すと、アプリケーションは最初の結果を検索して取得し、それをジオポイントに配置します。これにより、プログラムの一部が機能します。しかし、その時点までアニメーション化しようとすると、アプリケーションがクラッシュします。
これが、「アイスランドのダルビーク」という場所に正常に移動したonCreate関数です。
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の「検索」機能で明らかに何か間違ったことをしています。
何が悪いのか考えてみませんか?