0

我正在使用 Mapsforge 库来开发我的应用程序。在地图中,您可以通过在地图上长按来创建自己的标记。

现在我想使用 sharedPreferences 保存这个标记,所以如果用户关闭应用程序和 repp,标记仍然存在。不幸的是,我没有在网上找到有关如何执行此操作的此类信息。我找到了一些关于如何使用谷歌地图的信息,但谷歌地图有不同的功能。谁能帮我怎么做?

这就是我在地图上添加标记的方式。代码在 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,我能够让共享首选项工作,但仍然是一个问题。这是代码:

在 onCreate

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”,则标记会出现在地图上的某处。如何解决这个问题?

4

2 回答 2

1

做这样的事情,在你的课堂上添加

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);
}

这表示如果您在首选项中存储了纬度和经度,您希望在地图上的给定坐标处绘制标记并将标记添加到叠加项目列表中。

于 2014-05-23T19:51:23.797 回答
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();

}

this is in generally how to use SharedPreferences just do same thing in your project
i hope this helps

于 2014-05-23T19:55:55.237 回答