应用关闭后在地图上保存标记,再次打开时检索它

时间:2014-08-12 03:04:31

标签: android google-maps sharedpreferences google-maps-api-2

我正在尝试在地图上添加标记,关闭我的应用,打开时标记将位于最后一个位置。我试图用保存的偏好来做这个,但我不完全理解它为什么不保存。

我的代码:

public void onClickMarker(){

    b1 = (Button) findViewById(R.id.button1);

    b1.setBackgroundResource(R.drawable.parkmycar);
    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            Location lastLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

            //-----------------------------------------------------------------//
            lat = lastLocation.getLatitude();
            lng =  lastLocation.getLongitude();

            SharedPreferences pref = getSharedPreferences("car coordinates",MODE_PRIVATE);
            Editor editor = pref.edit();
            editor.putLong("lat", Double.doubleToLongBits(lat));
            editor.putLong("lng", Double.doubleToLongBits(lng));
            editor.commit();

            SharedPreferences shared = getSharedPreferences("car coordinates",MODE_PRIVATE);
            double myLat = Double.longBitsToDouble(shared.getLong("lat", 0));
            double myLng = Double.longBitsToDouble(shared.getLong("lng", 0));

            //-----------------------------------------------------------------//
            LatLng currLatLng = new LatLng(myLat, myLng);


            if(carLoc!=null){
                carLoc.remove();
            }
            carLoc= map.addMarker(new MarkerOptions().position(currLatLng)
                    .title("your car location")
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.unnamed)));

            map.moveCamera(CameraUpdateFactory.newLatLngZoom(currLatLng, 17));
        }
    });
}

该方法是在onCreate方法上调用的,当它将标记放在当前位置时,但在应用关闭并再次打开后标记将不会存在。

3 个答案:

答案 0 :(得分:0)

您可以使用这些方法在sharedPreferences中保存double值,如下所示:

Editor putDouble(final Editor edit, final String key, final double value) 
{
   return edit.putLong(key, Double.doubleToRawLongBits(value));
}

并检索回使用此方法:

double getDouble(final SharedPreferences prefs, final String key, final double defaultValue)
{
    return Double.longBitsToDouble(prefs.getLong(key, Double.doubleToLongBits(defaultValue)));
}

如果您保存了LatLng,请检查布尔值:

boolean ifSaved = false;

 SharedPreferences pref = getSharedPreferences("car coordinates",MODE_PRIVATE);
   Editor editor = pref.edit();
   ifSaved = pref.getBoolean("ifLatLngSaved",true);

   if(ifSaved)
  {
   editor = putDouble(editor,"Lat",myLat);
   editor = putDouble(editor,"Lng",myLng);
   ifSaved = false;
   editor.putBoolean("ifLatLngSaved",ifSaved);     
   editor.commit();
   }
  else
{
  double myPreviousLat = getDouble(pref,"myLat",0);
  double myPreviousLng = getDouble(pref,"myLng",0);
}

答案 1 :(得分:0)

你做了

  • 从位置服务获取lat& lng
  • 将lat& lng置于SharePreferences
  • 从SharePreferences获取lat& lng

所以我认为你总是从位置服务获得新的lat& lng,而不是你放入SharePreference的lat& lng

你应该

  • 从SharePreferences获取lat& lng
  • 如果他们等于0 - >从位置服务获取lat& lng
  • 使用lat& lng创建标记,然后显示int到地图
  • 将lat& lng置于SharePreferences

答案 2 :(得分:0)

我把它的经纬度保存到了Strings,我的保存方法:

    String latitude = String.valueOf(lat);
    String longitude = String.valueOf(lng);
    editor.putString("latitude", latitude);
    editor.putString("longitude", longitude);

然后用我的get方法获取它们:

    String latitude = preferences.getString("latitude", "");
    String longitude = preferences.getString("longitude", "");
    lat = Double.parseDouble(latitude);
    lng = Double.parseDouble(longitude);

这适用于我。