我正在使用Mapsforge Library开发我的应用。在地图中,您可以通过长按地图创建自己的标记。
现在我想使用sharedPreferences保存此标记,因此如果用户关闭应用程序并重新启动,则标记仍然存在。不幸的是,我没有在网上找到关于如何这样做的信息。我已经找到了一些关于如何使用谷歌地图的信息,但谷歌地图有不同的功能。 任何人都可以帮我怎么做?
这是我在地图上添加标记的方式。代码在OnCreate部分:
myListOverlay = new ListOverlay();
myOverlayItems = myListOverlay.getOverlayItems();
mapView.getOverlays().add(myListOverlay);
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e) {
float x = e.getX();
float y = e.getY();
if (e.getAction() == MotionEvent.ACTION_DOWN) {
GeoPoint gPt = mapView.getProjection().fromPixels((int) x, (int)y);
myMarker = createMarker(gPt, R.drawable.ic_location);
myOverlayItems.add(myMarker);
byte viewMarker = mapView.getMapViewPosition().getZoomLevel();
mapView.getMapViewPosition().setZoomLevel(viewMarker);
}
}
public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
myOverlayItems.remove(myMarker);
byte viewMarker = mapView.getMapViewPosition().getZoomLevel();
mapView.getMapViewPosition().setZoomLevel(viewMarker);
return true;
};
}
);
mapView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v0, MotionEvent e) {
// Only fires if Mapview touched
return mGestureDetector.onTouchEvent(e);
}
});
感谢zcg7009我能够让共享首选项工作,但仍然是个问题。这是代码:
if((prefs.contains("Lat")) && (prefs.contains("Lon"))){
String lat = prefs.getString("Lat",""); //with "" it throw error " Invalid "" ", if i put "0" the marker appear somewhere in the map
String lng = prefs.getString("Lng", "");
GeoPoint l =new GeoPoint(Double.parseDouble(lat),Double.parseDouble(lng));
myMarker = createMarker(l, R.drawable.ic_location);
myOverlayItems.add(myMarker);
byte viewMarker = this.mapView.getMapViewPosition().getZoomLevel();
this.mapView.getMapViewPosition().setZoomLevel(viewMarker);
this.mapView.getMapViewPosition().setCenter(l);
}
在LongPress方法中
float x = e.getX();
float y = e.getY();
GeoPoint gPt = mapView.getProjection().fromPixels((int)x, (int)y);
myMarker = createMarker(gPt, R.drawable.ic_location);
myOverlayItems.add(myMarker);
byte viewMarker = mapView.getMapViewPosition().getZoomLevel();
mapView.getMapViewPosition().setZoomLevel(viewMarker);
prefs.edit().putString("Lat",String.valueOf(gPt.latitude)).commit();
prefs.edit().putString("Lon",String.valueOf(gPt.latitude)).commit();
问题出在onCreate里面代码的第二行和第三行。如果我使用“”它会使错误无效“”,如果我使用“0”,标记会出现在地图上的某个位置。 怎么解决这个问题?
答案 0 :(得分:0)
在你的课堂上添加
这样的事情private SharedPreferecnes prefs;
然后当你的活动被销毁时
@Override
public void onDestroy(){
prefs.putDouble("marker_latitude", marker.getPosition().latitude);
prefs.putDouble("marker_longitude", marker.getPosition().longitude);
}
然后在onCreate
prefs = this.getSharedPreferences("com.smashing_boxes.taskproject",
Context.MODE_PRIVATE);
double latitude = prefs.getDouble("marker_latitude", -1.0);
double longitude = prefs.getDouble("marker_latitude", -1.0);
if(latitude != -1.0 && longitude != -1.0){
Marker marker = mapView.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude)));
myOverlayItems.add(marker);
}
这表示如果您在首选项中存储了纬度和经度,则需要在给定坐标处在地图上绘制标记,并将标记添加到叠加项目列表中。
答案 1 :(得分:0)
String fnail LOCATION_KEY = "key":
SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
preferences = getPreferences(MODE_APPEND);
String location = preferences = getString(LOCATION_KEY ,"default Value");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Editor editor = preferences.edit();
editor.putString(LOCATION_KEY, "what ever you want");
editor.commit();
}
这通常是如何使用SharedPreferences只是在你的项目中做同样的事情 我希望这有帮助