我今天早些时候提出这个问题,但我想我会尝试更详细地解释我的问题。
好的,我会尝试提供更多信息,尽可能解释我的问题。
因此,在我的应用中,用户可以点按地图上的任意点并添加自定义标记,因此当用户点击时,他们可以从相机意图中拍摄照片并将该图像返回到我customInfoWindow
。因此,当用户然后点击标记时,然后显示图像(缩略图),所有这些都有效但是一旦退出应用程序并且仍然显示返回标记,但图像不是。
所以我这样做是为了将图像添加到特定标记中:
private Map<String, Bitmap> myMarkersHash;
private String markerId;
.
.
.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_googlemaps);
myMarkersHash = new HashMap<String, Bitmap>();
.
.
.
@Override
public void onMapLongClick(final LatLng point) {
Marker marker = googleMap.addMarker(new MarkerOptions()
.title(title.getText().toString())
.snippet(snippet.getText().toString())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
.position(point));
markerId = marker.getId();
Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "Image");
imagesFolder.mkdirs();
image = new File(imagesFolder.getPath(), "MyImage_" + timeStamp + ".jpg");
fileUri = Uri.fromFile(image);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(imageIntent, TAKE_PICTURE);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK) {
try {
GetImageThumbnail getImageThumbnail = new GetImageThumbnail();
bitmap = getImageThumbnail.getThumbnail(fileUri, this);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
baos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 100, baos);
imageData = baos.toByteArray();
myMarkersHash.put(markerId, bitmap);
.
.
.
@Override
public View getInfoContents(Marker marker)
{
View v = getLayoutInflater().inflate(R.layout.infowindow_layout, null);
ImageView markerIcon = (ImageView) v.findViewById(R.id.marker_icon);
Bitmap bitmap = myMarkersHash.get(marker.getId());
markerIcon.setImageBitmap(bitmap);
所以上面的代码让我添加标记并向添加的标记显示正确的图像。然后我需要保存标记信息,以便当用户返回应用程序时,应显示标记:
ContentValues contentValues = new ContentValues();
contentValues.put(LocationsDB.FIELD_LAT, point.latitude);
contentValues.put(LocationsDB.FIELD_LNG, point.longitude);
contentValues.put(LocationsDB.FIELD_ZOOM, googleMap.getCameraPosition().zoom);
contentValues.put(LocationsDB.FIELD_IMAGE, markerId);
contentValues.put(LocationsDB.FIELD_FILEPATH, fileUri.toString());
LocationInsertTask insertTask = new LocationInsertTask();
insertTask.execute(contentValues)
.
.
.
private void drawMarker(LatLng point, byte[] id, byte[] filep) {
Marker marker = googleMap.addMarker(new MarkerOptions()
.title(title)
.snippet(snippet)
.position(thePoint));
markerId = marker.getId();
然后在应用启动时加载数据:
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
int locationCount = 0;
double lat=0;
double lng=0;
float zoom=0;
byte [] id = null;
byte [] filep = null;
locationCount = arg1.getCount();
arg1.moveToFirst();
for(int i=0;i<locationCount;i++){
lat = arg1.getDouble(arg1.getColumnIndex(LocationsDB.FIELD_LAT));
lng = arg1.getDouble(arg1.getColumnIndex(LocationsDB.FIELD_LNG));
zoom = arg1.getFloat(arg1.getColumnIndex(LocationsDB.FIELD_ZOOM));
id = arg1.getBlob(arg1.getColumnIndex(LocationsDB.FIELD_IMAGE));
filep = arg1.getBlob(arg1.getColumnIndex(LocationsDB.FIELD_FILEPATH));
point = new LatLng(lat, lng);
drawMarker(point, title, id, filep);
arg1.moveToNext();
}
if(locationCount>0){
googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat,lng)));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(zoom));
if(myMarkersHash.get(filep) != null & id != null){
bitmap = BitmapFactory.decodeFile(image.getAbsolutePath());
final ImageView markerIcon = (ImageView) findViewById(R.id.marker_icon);
markerIcon.setImageBitmap(bitmap);
}
}
}
因此,您可以看到它保存标记和所有信息*但在应用重新启动后不会加载图像 *我知道它保存所有信息的原因是,当我访问我的数据库查看它时,我可以看到列和数据:
so for column 1 I have the ID of “1” then Column 2 I have the lat point of “xx.xxxx” and Column 3 the lng point of “xx.xxxx” and then Column 4 the zoom of “9” and then Column 5 the markerId of “m01” and the Column 6 I have “file:///storage/emulated/0/Image/MyImage_yyyymmdd_HHmmss.jpg”
因此,您可以看到它肯定会保存用图像加载标记所需的信息,但由于某种原因它不会。当应用程序再次启动时,我也没有收到错误消息或任何内容,所有标记都显示但没有图像。
我该怎么做才能解决这个问题? 我真的希望有人能够帮助我解决这个问题。 在此先感谢您的帮助。
修改
我现在尝试的是:
File imgFile = new File("fileUri");
if(imgFile.exists())
{
ImageView myImage = (ImageView) findViewById(R.id.marker_icon);
myImage.setImageURI(Uri.fromFile(imgFile));
但仍然是一样的。