Reputation: 548
I am trying to save the position of a marker when the user taps the screen, I have followed proper steps on how to use shared preferences and retrieve them. But when I plot a location and I close and reopen the app. The app crashes.
This is my MapActivity:
//Keys for Sharedpreferences
public static final String SHARED_PREF_NAME = "plot";
public static final String LONGTITUDE = "long";
public static final String LATITUDE = "lat";
public static final String PLOTTED= "plotted";
private boolean plotted= false;
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
LatLng philippines = new LatLng(13, 123);
mMap.moveCamera(CameraUpdateFactory.newLatLng(philippines));
mMap.animateCamera(CameraUpdateFactory.zoomTo(5.0f));
if (ActivityCompat.checkSelfPermission(mapsPage.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mapsPage.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
mMap.clear();
mMap.addMarker(new MarkerOptions().position(point).draggable(false));
mMap.moveCamera(CameraUpdateFactory.newLatLng(point));
String lat = Double.toString(point.latitude);
String lon = Double.toString(point.longitude);
SharedPreferences sharedPreferences = mapsPage.this.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(LOGGEDIN_SHARED_PREF, true);
editor.putString(LONGTITUDE, lon);
editor.putString(LATITUDE, lat);
editor.commit();
}
});
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
checkedout = sharedPreferences.getBoolean(LOGGEDIN_SHARED_PREF, false);
if(checkedout)
{
SharedPreferences sharedPreferencess = getSharedPreferences(mapsPage.SHARED_PREF_NAME, Context.MODE_PRIVATE);
String lon = sharedPreferencess.getString(mapsPage.LONGTITUDE,"Not Available");
String lat = sharedPreferencess.getString(mapsPage.LATITUDE,"Not Available");
double lo = Double.parseDouble(lon);
double la = Double.parseDouble(lat);
LatLng resumedPosition = new LatLng(lo,la);
mMap.clear();
mMap.addMarker(new MarkerOptions().position(resumedPosition).draggable(false));
mMap.moveCamera(CameraUpdateFactory.newLatLng(resumedPosition));
}
}
Thanks in advance for any help! :D
Upvotes: 0
Views: 719
Reputation: 1487
It appears that you're trying to move your map on your onResume()
but I guess the map isn't ready by the time the android calls onResume()
. So to fix this I would moving it on the onMapReady()
method.
//Keys for Sharedpreferences
public static final String SHARED_PREF_NAME = "plot";
public static final String LONGTITUDE = "long";
public static final String LATITUDE = "lat";
public static final String PLOTTED= "plotted";
private boolean plotted= false;
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
LatLng philippines = new LatLng(13, 123);
mMap.moveCamera(CameraUpdateFactory.newLatLng(philippines));
mMap.animateCamera(CameraUpdateFactory.zoomTo(5.0f));
if (ActivityCompat.checkSelfPermission(mapsPage.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mapsPage.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
mMap.clear();
mMap.addMarker(new MarkerOptions().position(point).draggable(false));
mMap.moveCamera(CameraUpdateFactory.newLatLng(point));
String lat = Double.toString(point.latitude);
String lon = Double.toString(point.longitude);
SharedPreferences sharedPreferences = mapsPage.this.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(LOGGEDIN_SHARED_PREF, true);
editor.putString(LONGTITUDE, lon);
editor.putString(LATITUDE, lat);
editor.commit();
}
});
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
checkedout = sharedPreferences.getBoolean(LOGGEDIN_SHARED_PREF, false);
if(checkedout)
{
SharedPreferences sharedPreferencess = getSharedPreferences(mapsPage.SHARED_PREF_NAME, Context.MODE_PRIVATE);
String lon = sharedPreferencess.getString(mapsPage.LONGTITUDE,"Not Available");
String lat = sharedPreferencess.getString(mapsPage.LATITUDE,"Not Available");
double lo = Double.parseDouble(lon);
double la = Double.parseDouble(lat);
LatLng resumedPosition = new LatLng(lo,la);
mMap.clear();
mMap.addMarker(new MarkerOptions().position(resumedPosition).draggable(false));
mMap.moveCamera(CameraUpdateFactory.newLatLng(resumedPosition));
}
}
@Override
protected void onResume() {
super.onResume();
}
Upvotes: 1