2017-05-24 13 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()で地図を移動しようとしているようですが、アンドロイドが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

はい、あなたは正しいです。私はそのハハを決して考えなかったでしょう!どうもありがとう! –

関連する問題