我正在尝试将自定义添加的标记保存到地图中,因此当用户退出应用程序然后返回应用程序时,标记应该仍然存在。现在我尝试过共享偏好,但这似乎不起作用。所以现在我已经尝试了这个,但它似乎还没有保存用户将标记添加到地图的点:
这是我将标记添加到地图的方式:
private static final String EXTRA_PLACE="thePoint";
LatLng thePoint;
然后在onSaveInstanceState
savedInstanceState.putParcelable(EXTRA_PLACE, thePoint);
然后在onRestoreInstanceState
thePoint=(LatLng)savedInstanceState.getParcelable(EXTRA_PLACE);
原因是当用户点击地图以放置标记时,它会打开相机意图,然后返回缩略图。如果我不这样做,那么当从照相机返回意图时,点击的地图上的点已经从onActivityResult
返回
这是用户添加自定义标记的时间:
thePoint=point;
Marker marker = googleMap.addMarker(new MarkerOptions()
.position(thePoint).icon(BitmapDescriptorFactory
.fromResource(R.drawable.sighting_marker)));
markerId = marker.getId();
(markerId用于保存为该标记拍摄的图像,以便在用户点击标记时返回较大的图像。)
然后就是我如何保存我的自定义标记(后面是SO(Save markers on Android google maps v2)上的示例)这正是我想要实现的目标。
@Override
public void onResume(){
super.onResume();
try {
FileOutputStream output = openFileOutput("custommarkers.txt",Context.MODE_PRIVATE);
DataOutputStream dout = new DataOutputStream(output);
dout.writeInt(customMarkerAdded.size()); // Save line count
for (LatLng point : customMarkerAdded) {
dout.writeUTF(point.latitude + "," + point.longitude);
Log.v("write", point.latitude + "," + point.longitude);
}
dout.flush();
dout.close();
} catch (IOException exc) {
exc.printStackTrace();
}
@Override
public void onPause(){
super.onPause();
try {
FileInputStream input = openFileInput("latlngpoints.txt");
DataInputStream din = new DataInputStream(input);
int sz = din.readInt(); // Read line count
for (int i = 0; i < sz; i++) {
String str = din.readUTF();
Log.v("read", str);
String[] stringArray = str.split(",");
double latitude = Double.parseDouble(stringArray[0]);
double longitude = Double.parseDouble(stringArray[1]);
customMarkerAdded.add(new LatLng(latitude, longitude));
}
din.close();
loadMarkers(customMarkerAdded);
} catch (IOException exc) {
exc.printStackTrace();
}
}
private void loadMarkers(List<LatLng> customMarkerAdded2) {
// TODO Auto-generated method stub
}
}
但这似乎不起作用,它并没有挽救标记。因此,当退出应用程序然后返回标记时,就不存在。
我在这里遗漏了什么吗?请帮忙! 提前谢谢!
答案 0 :(得分:0)
您始终可以使用共享首选项在xml文件中本地存储值,并在需要时检索它。以下是在共享首选项中存储标记的代码,并在应用重新打开时获取它。
Marker m = null;
SharedPreferences prefs = null;//Place it before onCreate you can access its values any where in this class
// onCreate method started
prefs = this.getSharedPreferences("LatLng",MODE_PRIVATE);
//Check whether your preferences contains any values then we get those values
if((prefs.contains("Lat")) && (prefs.contains("Lng"))
{
String lat = prefs.getString("Lat","");
String lng = prefs.getString("Lng","");
LatLng l =new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
gMap.addMarker(new MarkerOptions().position(l));
}
Inside your onMapClick
gMap.setOnMapClickListener(new GoogleMap.OnMapClickListener(){
@Override
public void onMapClick(LatLng point) {
marker = gMap.addMarker(new MarkerOptions().position(point));
/* This code will save your location coordinates in SharedPrefrence when you click on the map and later you use it */
prefs.edit().putString("Lat",String.valueOf(point.latitude)).commit();
prefs.edit().putString("Lng",String.valueOf(point.longitude)).commit();
}
});
删除标记 p>
gMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker arg0) {
//Your marker removed
marker.remove();
return true;
}
});
由于您使用的是自定义标记。以下是添加自定义标记的代码,在添加自定义标记之后,将该流程存储在共享首选项中,然后检索它与上面相同。
// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, lng);
// Changing marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.your_own_image)));
// adding marker
gMap.addMarker(marker);