I am trying to start a streetview panorama from a menu item on the action bar. I tried using intent (don't know if I am correct). The app launches fine but when I click on the menu item, I get this runtime error:
Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportStreetViewPanoramaFragment.getStreetViewPanoramaAsync(com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback)' on a null object reference
MapsActivity.java:
package com.example.user.streetview;
import...
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private static final LatLng HOME = new LatLng(6.450957, 3.363493);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.maps);
mapFragment.getMapAsync(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.get_panorama, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.get_panorama:
Intent intent = new Intent(this, StreetViewPanoramaActivity.class);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker for HOME and move the camera
mMap.addMarker(new MarkerOptions().position(HOME).title("Home marker"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(HOME));
}
}
StreetViewPanoramaActivity.java
package com.example.user.streetview;
import...
public class StreetViewPanoramaActivity extends FragmentActivity implements StreetViewPanorama.OnStreetViewPanoramaChangeListener {
private StreetViewPanorama mStreetViewPanorama;
private static final LatLng HOME = new LatLng(6.450957, 3.363493);
public static final float ZOOM_BY = 0.5f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_street_view_panorama);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
//Then use getStreetViewPanoramaAsync() to set the callback on the fragment.
SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager().findFragmentById(R.id.street_view_panorama);
streetViewPanoramaFragment.getStreetViewPanoramaAsync(new OnStreetViewPanoramaReadyCallback() {
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
mStreetViewPanorama = panorama;
mStreetViewPanorama.setPosition(HOME);
mStreetViewPanorama.setStreetNamesEnabled(true);
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
.zoom(mStreetViewPanorama.getPanoramaCamera().zoom + ZOOM_BY)
.tilt(mStreetViewPanorama.getPanoramaCamera().tilt)
.bearing(mStreetViewPanorama.getPanoramaCamera().bearing)
.build();
}
});
@Override
public void onStreetViewPanoramaChange(StreetViewPanoramaLocation location) {
location = mStreetViewPanorama.getLocation();
if (location != null && location.links != null) {
mStreetViewPanorama.setPosition(location.links[0].panoId);
}
}
}
Menu layout:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/get_panorama"
android:orderInCategory="100"
android:title="@string/get_panorama"
app:showAsAction="always">
</item>
</menu>
Thank you!