gpt4 book ai didi

java - 如何使用 SharedPreferences 保存标记

转载 作者:行者123 更新时间:2023-12-01 12:56:35 25 4
gpt4 key购买 nike

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

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

这就是我在 map 上添加标记的方法。代码在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里面的第二行和第三行代码。如果我使用 "",它会抛出错误 invalid "",如果我使用 "0",标记会出现在 map 上的某处。如何解决这个问题?

最佳答案

做这样的事情,在你的类中添加

private SharedPreferecnes prefs;

然后当你的 Activity 被破坏时

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

这表示,如果您在偏好设置中存储了纬度和经度,则您希望在 map 上的给定坐标处绘制标记,并将该标记添加到叠加项目列表中。

关于java - 如何使用 SharedPreferences 保存标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com