我创建了一个活动,它使用谷歌地图生成 UI 并显示用户位置,其开头为:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_display);
Button myLocationBtn = (Button)findViewById(R.id.myLocationBtn);
Button searchRequest = (Button)findViewById(R.id.searchRequest);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
myLocationBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
touched = false;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
});
searchRequest.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
locationManager.removeUpdates(locationListener);
onSearchRequested();
}
});
initialiseMapView();
}
这个屏幕需要一段时间才能加载,我认为这是实际调用和运行地图信息并获取用户位置的结果,它在我的方法 initialiseMapView(); 中运行。所以我尝试如下引入AsyncTask:
private class loadMap extends AsyncTask<String, Integer, String>{
@Override
protected String doInBackground(String... params) {
initialiseMapView();
return null;
}
}
我在原始代码中所做的只是更改了 initialiseMapView(); 到新的 loadMap().execute();。每次我尝试运行此活动时应用程序都会崩溃,我相信这是因为 initialiseMapView 方法不在 loadMap 类中,但我不确定。
请帮忙 :(
这是initialiseMapView方法:
private void initialiseMapView() {
mapView = (MapView) findViewById(R.id.mapView);
mapController = mapView.getController();
locationListener = new GPSLocationListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(false);
GeoPoint startPoint = new GeoPoint((int)(51.500152 * 1E6), (int)(-0.126236 * 1E6));
mapController.setCenter(startPoint);
mapController.setZoom(mapView.getZoomLevel());
mapController.setZoom(14);
mapFromQuery("london");
mapView.invalidate();
}
如果无法做到这一点,是否有某种方法可以在内容加载时显示屏幕?