如何将额外的标记信息(HashMap)保存到SQlite数据库

时间:2014-12-22 14:18:18

标签: android sqlite google-maps

我有手动添加到地图上的标记,并且已经实现了SQlite数据库,以便在用户返回地图后检索标记。所有这一切都很好,但是一旦用户点击标记(自定义信息窗口),我似乎无法将额外信息添加到标记中以显示

所以我所做的是我在数据库中创建了字段,然后在onMapLongClick中添加了这个:

contentValues.put(LocationsDB.FIELD_BMP, mImage + bitmap);

所以在我看来,它告诉我将mImage和位图保存在该字段中以便稍后检索。

然后在检索时我添加了这个:

float img=0;

....

img = arg1.getFloat(arg1.getColumnIndex(LocationsDB.FIELD_BMP));

....

 if(locationCount>0){

....

bitmap = myMimage.get(img);

所以这告诉我获取FIELD_BMP并将该图像放在该标记处?

这是我用来获取每个标记的不同信息的代码:

private Map<String, Bitmap> myMimage;
private String mImage;

\\Then in the onCreate method

myMimage = new HashMap<String, Bitmap>();

\\Then to display the phto in the custom info window

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

然后在放置标记时我使用:

Marker marker = googleMap.addMarker(new MarkerOptions()
    .position(pointTappedOnMap));
    mImage = marker.getId();

一切正常,它只是不保存该标记的图像 请帮我? 在此先感谢所有!!

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

1 个答案:

答案 0 :(得分:0)

从我看到的情况来看,您没有创建架构来正确地将标记对象存储在SQLiteDB中。如果您将img声明为类型,它不存在,您可能无法创建有效的数据库字段,因为img不是类型。您的数据库架构应如下所示:

@Override
public void onCreate(SQLiteDatabase db) {
    String sql =     "create table " + DATABASE_TABLE + " ( " +
    FIELD_ROW_ID + " integer primary key autoincrement , " +
    FIELD_LNG + " double , " +
    FIELD_LAT + " double , " +
    FIELD_ZOOM + " text, " +   
    FIELD_IMAGE + " text" + 
" ) ";
    db.execSQL(sql);
}

您必须使用两个字段:marker_id(文本或数字)和img(文本引用路径或blob,如果数据库中为二进制)。

此外,在这种情况下,内容提供商的使用不会有所帮助。但是,使用内容值会。