2017-05-24 67 views
0

我想在用戶點擊屏幕時保存標記的位置,我遵循瞭如何使用共享首選項並檢索它們的適當步驟。但是當我繪製一個位置並關閉並重新打開應用程序時。該應用程序崩潰。使用共享首選項在地圖上保存地圖標記位置

這是我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)); 
    } 
} 

提前任何幫助謝謝! :D

+0

你能發佈崩潰日誌嗎? – Rafael

回答

1

看起來您正試圖將您的地圖移動到您的onResume()上,但我猜地圖在Android調用onResume()時尚未準備好。所以要解決這個問題,我會在onMapReady()方法上移動它。

//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(); 


} 
+0

是的,先生,你是對的。我永遠不會想到那個哈哈!先生,謝謝! –