Я пытаюсь внедрить Maps v2 в вкладках панели действий. Вкладка карты - это фрагмент, который унаследован от MapFragment. Сила приложения закрывается после нажатия на вкладку «Карты». Он дает исключение из null-указателя внутри метода onStart, где вызывается getMap(). Вот код. Скажите, где я ошибаюсь.вызов getMap() внутри onStart() в MapFragment дает nullpointerexception
public class MapActivity extends MapFragment implements LocationListener {
int mNum;
GoogleMap googleMap;
public static MapActivity newInstance() {
MapActivity f = new MapActivity();
// Supply num input as an argument.
Bundle args = new Bundle();
//args.putInt("num", num);
//f.setArguments(args);
return f;
}
/**
* When creating, retrieve this instance's number from its arguments.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.maplayout, container, false);
return v;
}
/**
* The Fragment's UI is just a simple text view showing its
* instance number.
*/
public void onStart(){
super.onStart();
googleMap=getMap();
// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
getActivity();
// Getting LocationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
Location location = locationManager.getLastKnownLocation(provider);
if(location!=null){
onLocationChanged(location);
}
locationManager.requestLocationUpdates(provider, 20000, 0, this);
// Setting a click event handler for the map
googleMap.setOnMapClickListener(new OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
// Creating a marker
MarkerOptions markerOptions = new MarkerOptions();
// Setting the position for the marker
markerOptions.position(latLng);
// Setting the title for the marker.
// This will be displayed on taping the marker
markerOptions.title(latLng.latitude + " : " + latLng.longitude);
// Clears the previously touched position
//googleMap.clear();
// Animating to the touched position
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
// Placing a marker on the touched position
googleMap.addMarker(markerOptions);
}
});
}
@Override
public void onLocationChanged(Location location) {
TextView tvLocation = (TextView) getActivity().findViewById(R.id.tv_location);
// Getting latitude of the current location
double latitude = location.getLatitude();
// Getting longitude of the current location
double longitude = location.getLongitude();
// Creating a LatLng object for the current location
LatLng latLng = new LatLng(latitude, longitude);
// Showing the current location in Google Map
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
// Zoom in the Google Map
googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
// Setting latitude and longitude in the TextView tv_location
tvLocation.setText("Latitude:" + latitude + ", Longitude:"+ longitude);
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
Edit: Я думаю, что этот код не должен быть записан в методе OnStart потому что карта не отображается, то. Как узнать, что карта была загружена, чтобы получить ее объект?
Хороший звонок при необходимости проверки наличия игровых сервисов, все приложения должны обрабатывать это, потому что новый телефон не будет установлен. – deepwinter