在退出应用程序并返回时,将LatLng点保存在地图上不会加载标记

时间:2014-12-21 07:00:46

标签: android google-maps google-maps-markers

我正在尝试将自定义添加的标记保存到地图中,因此当用户退出应用程序然后返回应用程序时,标记应该仍然存在。现在我尝试过共享偏好,但这似乎不起作用。所以现在我已经尝试了这个,但它似乎还没有保存用户将标记添加到地图的点:

这是我将标记添加到地图的方式:

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

}
}

但这似乎不起作用,它并没有挽救标记。因此,当退出应用程序然后返回标记时,就不存在。

我在这里遗漏了什么吗?请帮忙! 提前谢谢!

1 个答案:

答案 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();

}
}); 

删除标记

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