加载保存在SQlite数据库中的标记图像

时间:2015-01-23 17:27:24

标签: android sqlite google-maps

我使用SQLite数据库保存了我的应用中的标记ID和图像文件路径。我目前遇到的问题是当再次加载地图时,标记会显示在用户添加的位置,但是通过相机意图(图像路径)为该标记拍摄的图像不会加载标记。

所以要解释一下,我的标记有CustomInfoWindow,显示标题和片段(标记的位置)然后有一个ImageView,一旦标记放置,它会显示图像。但是当重新加载应用程序时,图像已经消失,但会显示标题和片段。

因此,在保存图像文件路径和标记ID时,我使用:

contentValues.put(LocationsDB.FIELD_IMAGE, markerId);
contentValues.put(LocationsDB.FIELD_FILEPATH, image.getAbsolutePath());

它保存的数据是:

m15  --> Marker ID
/storage/emulated/0/My Folder/MyImage_123.jpg --> File Path

然后在应用启动时加载标记:

String filep = null;
String id = null;

id = arg1.getString(arg1.getColumnIndex(LocationsDB.FIELD_IMAGE));
filep = arg1.getString(arg1.getColumnIndex(LocationsDB.FIELD_FILEPATH));

drawMarker(thePoint, title, snippet, id, filep);

然后在我的drawMarker方法中:

private void drawMarker(LatLng point, String title, String snippet, String id, String filep) {
Marker marker = googleMap.addMarker(new MarkerOptions()
.title(title)
.snippet(snippet)
.position(thePoint)
.icon(BitmapDescriptorFactory
      .defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
markerId = marker.getId();

当推迟初始图片,标题和片段时:

@Override
  public View getInfoContents(Marker marker)
    {
View v  = getLayoutInflater().inflate(R.layout.infowindow_layout, null);
  ImageView markerIcon = (ImageView) v.findViewById(R.id.marker_icon);
  TextView titleText = (TextView) v.findViewById(R.id.TitleId);
  titleText.setText(marker.getTitle());
  TextView snippetText = (TextView) v.findViewById(R.id.SnippetId);
  snippetText.setText(marker.getSnippet());
  Bitmap bitmap = myMarkersHash.get(marker.getId());
  markerIcon.setImageBitmap(bitmap);
  return v;

所以我知道我需要以某种方式(在drawMarker方法中)实现filepid,以便我可以显示该标记的图像。但我不知道该怎么做。我不想用图标替换图像,而是想要在图像视图中使用图像的默认标记。

我几周来一直在努力解决这个问题。所以现在我希望有人能够提供帮助。

1 个答案:

答案 0 :(得分:1)

修改

抱歉误解了你的问题。

您可以通过HashMap保存特定标记的文件路径,如下所示:

private HashMap<Marker, String> mMarkerImages = new HashMap<>();

private void drawMarker(LatLng point, String title, String snippet, String id, String filep) {
    Marker marker = googleMap.addMarker(new MarkerOptions()
            .title(title)
            .snippet(snippet)
            .position(thePoint)
            .icon(BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
    mMarkerImages.put(marker, filep);
}

稍后您可以使用相同的HashMap来获取特定于某个标记的文件路径:

@Override
public View getInfoContents(Marker marker) {
    String filep = mMarkerImages.get(marker);
    if (filep != null) {
        // File path was set for this marker, display your image
    }
    return null;
}