使用SharedPreferences只保存一个标记,而不保存与该标记一起使用的图像

时间:2014-12-21 13:52:59

标签: android google-maps

好的,所以我现在为我的地图实现sharedPreferences以保存添加到地图中的所有标记,但是它似乎只保存一个标记?此外,标记还有一个图像,因此当点击标记显示图像时,也不会保存。

所以我基本上最终会保存一个没有数据的标记,其余标记将被丢弃。

有人可以指出我正确的方向吗?

这是我添加标记的时候:

Marker marker = googleMap.addMarker(new MarkerOptions()
            .position(thePoint).icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.ic_marker)));
markerId = marker.getId();

prefs.edit().putString("Lat",String.valueOf(point.latitude)).commit();
prefs.edit().putString("Lng",String.valueOf(point.longitude)).commit();

然后这是我在活动再次开始时检索标记的时间:

String lat = prefs.getString("Lat","");
String lng = prefs.getString("Lng","");
LatLng l =new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
googleMap.addMarker(new MarkerOptions()
            .position(l).icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.ic_marker)));

对于markerId的{​​{1}}:

custonInfoWindow

总结一下:

  1. 仅保存标记而不保存多个标记
  2. 与该标记一起使用的图像也不会保存
  3. 我做错了什么?

    修改

    这是我更新的代码:

    View v  = getLayoutInflater().inflate(R.layout.infowindow_layout, null);
    final ImageView markerIcon = (ImageView) v.findViewById(R.id.marker_icon);
    Bitmap bitmap = myMarkersHash.get(marker.getId());
    markerIcon.setImageBitmap(bitmap);
    

    然后添加标记时:

     googleMap.getUiSettings().setMyLocationButtonEnabled(true);
     googleMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());
    
     prefs = this.getSharedPreferences("LatLng",MODE_PRIVATE);
     if((prefs.contains("Lat_")) && (prefs.contains("Lng_")))
     {   
     String markersfromprefs = prefs.getString("markers", null);
     String [] markerIds = markersfromprefs.split(",");
    
     for(String markerId : markerIds){
     String lat = prefs.getString("Lat_"+markerId,"");
     String lng = prefs.getString("Lng_"+markerId,"");
     LatLng l =new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
     googleMap.addMarker(new MarkerOptions()
        .position(l).icon(BitmapDescriptorFactory
             .fromResource(R.drawable.sighting_marker)));
      }
     }
    

3 个答案:

答案 0 :(得分:1)

您无法在共享首选项中保存数组,或者至少您必须编写自己的代码才能执行此操作。首选项是一个键值 - 因此您必须使用多个键来保存数组。在这种情况下,您必须使用数据库而不是使用共享首选项。

答案 1 :(得分:0)

共享引用将您的值存储为键值对。 你在用线做什么

prefs.edit().putString("Lat",String.valueOf(point.latitude)).commit();

对系统说“向我存储一个带有point.latitude值的字符串并引用它,以便我稍后可以使用”Lat“键找到它。 如果要使用共享首选项,则需要使用唯一键存储点。目前,您正在覆盖“Lat”和“Lat”键引用的值。 “Lng”表示地图上的每个点。

对您开放的一个选项是将所有点存储在数组中,并将此数组作为Json存储在首选项中。

答案 2 :(得分:0)

你可以尝试类似的东西:

Marker marker = googleMap.addMarker(new MarkerOptions()
            .position(thePoint).icon(BitmapDescriptorFactory
                .fromResource(R.drawable.ic_marker)));
markerId = marker.getId();

//markerId is added to the name of sharedPreferences
prefs.edit().putString("Lat_"+markerId,String.valueOf(point.latitude)).commit();
prefs.edit().putString("Lng_"+markerId,String.valueOf(point.longitude)).commit();

对于自定义图像,同样的事情:

prefs.edit().putString("image_"+markerId,"your_image_reference").commit();

然后你只需要存储每个标记Id(在一个字符串中,例如用逗号分隔)

String markersfromprefs = prefs.getString("markers", null);
prefs.edit().putString("markers", markersfromprefs+","+markerId).commit();

要检索所有标记坐标:

googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());

 prefs = this.getSharedPreferences("LatLng",MODE_PRIVATE);

String markersfromprefs = prefs.getString("markers", null);

if (markersfromprefs != null){
    String [] markerIds = markersfromprefs.split(",");

    for(String markerId : markersId){
        String lat = prefs.getString("Lat_"+markerId,"");
        String lng = prefs.getString("Lng_"+markerId,"");
        LatLng l =new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
        googleMap.addMarker(new MarkerOptions()
            .position(l).icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.ic_marker)));
    }
}