如何使用SharedPreferences保存标记

时间:2014-05-23 19:14:35

标签: java android mapsforge

我正在使用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”,标记会出现在地图上的某个位置。 怎么解决这个问题?

2 个答案:

答案 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只是在你的项目中做同样的事情 我希望这有帮助