我正在尝试在地图上添加标记,关闭我的应用,打开时标记将位于最后一个位置。我试图用保存的偏好来做这个,但我不完全理解它为什么不保存。
我的代码:
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方法上调用的,当它将标记放在当前位置时,但在应用关闭并再次打开后标记将不会存在。
答案 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,而不是你放入SharePreference的lat& lng
你应该
答案 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);
这适用于我。