Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mapview and cameraupdate in api v2

Why the CameraUpdateFactory class is not working in my project? The app crashes if it executes the following command: CameraUpdate pino= CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude())); If i remove that line (and of course the next one), the code successfully starts and shows the map. I need the mapView and i need to use the new api v2. I declare the mapView in layout in this way:

        <com.google.android.gms.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"

    android:id="@+id/mappa"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/buttonBar"

    map:uiZoomControls="false"
     />

then in mainActivity.java i wrote this:

    public class MainActivity extends FragmentActivity    implements LocationListener, LocationSource { 
public static boolean locatingMe=true;
public GoogleMap mappa;
public MapView mapView;
private OnLocationChangedListener onLocationChangedListener;
private LocationManager locationManager;




@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mapView = (MapView) findViewById(R.id.mappa);
    mapView.onCreate(savedInstanceState);


        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    //You may want to pass a different provider in as the first arg here
    //depending on the location accuracy that you desire
    //see LocationManager.getBestProvider()
    Criteria locationCriteria = new Criteria();
    locationCriteria.setAccuracy(Criteria.NO_REQUIREMENT);
    locationManager.requestLocationUpdates(locationManager.getBestProvider(locationCriteria, true), 1L, 2F, this);

    if (mappa == null) {
        mappa=mapView.getMap();
        //This is how you register the LocationSource
        mappa.setLocationSource(this);
        mappa.getUiSettings().setMyLocationButtonEnabled(false);
        mappa.setMyLocationEnabled(true);
    }


}
@Override
public void onPause()
{
    if(locationManager != null)
    {
        locationManager.removeUpdates(this);
    }
    mapView.onPause();
    super.onPause();
}

@Override
public void onResume()
{
      checkGooglePlayServicesAvailability();
      checkGps();
      mapView.onResume();
      super.onResume();
}
@Override
protected void onDestroy() {
    mapView.onDestroy();
    super.onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    mapView.onLowMemory();
}

@Override
public void activate(OnLocationChangedListener listener) 
{
    onLocationChangedListener = listener;
}

@Override
public void deactivate() 
{
    onLocationChangedListener = null;
}

@Override
public void onLocationChanged(Location location) 
{
    if( onLocationChangedListener != null )
    {
        onLocationChangedListener.onLocationChanged( location );

        //Move the camera to the user's location once it's available!
        //only if locatingMe is true
        if (locatingMe) {
            if (mappa!=null){
                CameraUpdate pino= CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude()));
                        mappa.animateCamera(pino);

            }

        }

    }
}

@Override
public void onProviderDisabled(String provider) 
{
    // TODO Auto-generated method stub
    Toast.makeText(this, "provider disabled", Toast.LENGTH_SHORT).show();
}

@Override
public void onProviderEnabled(String provider) 
{
    // TODO Auto-generated method stub
    Toast.makeText(this, "provider enabled", Toast.LENGTH_SHORT).show();
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) 
{
    // TODO Auto-generated method stub
    Toast.makeText(this, "status changed", Toast.LENGTH_SHORT).show();
}

The error in the LogCat is the following:

 Caused by: java.lang.NullPointerException: CameraUpdateFactory is not initialized.
like image 451
Gaucho Avatar asked Dec 16 '12 20:12

Gaucho


2 Answers

I solved the problem by adding on the "onCreate" the following lines:

 try {
     MapsInitializer.initialize(this);
 } catch (GooglePlayServicesNotAvailableException e) {
     e.printStackTrace();
 }

the reason is that the CameraUpdateFactory needs to be initilized (even if from documentation it seems that using mapview it shoud be automatically initialized)

I even replaced "public class MainActivity extends FragmentActivity" with "public class MainActivity extends Activity". But i think that this last thing it was not needed..

like image 186
Gaucho Avatar answered Nov 09 '22 02:11

Gaucho


if i use:

try {
 MapsInitializer.initialize(this);
} catch (GooglePlayServicesNotAvailableException e) {
 e.printStackTrace();
}

The exception give me this error:

Unreachable catch block for GooglePlayServicesNotAvailableException.

This exception is never thrown from the try statement body".

I have use only:

MapsInitializer.initialize(this);

:)

like image 28
Paolo Mastrangelo Avatar answered Nov 09 '22 01:11

Paolo Mastrangelo