android - 在 Google 地图 Android 上获取图像
问题描述
我在我的应用程序中使用 Google Maps API,当我搜索位置并单击信息按钮时,它将显示一个带有名称、地址、图像的窗口。我从谷歌地图文档中复制了 func getPhoto() :
private Bitmap getPhotos() {
Task<PlacePhotoMetadataResponse> photoMetadataResponse = mGeoDataClient.getPlacePhotos(Maps.mPlace.getId());
photoMetadataResponse.addOnCompleteListener(new OnCompleteListener<PlacePhotoMetadataResponse>() {
@Override
public void onComplete(@NonNull Task<PlacePhotoMetadataResponse> task) {
try {
// Get the list of photos.
PlacePhotoMetadataResponse photos = task.getResult();
// Get the PlacePhotoMetadataBuffer (metadata for all of the photos).
PlacePhotoMetadataBuffer photoMetadataBuffer = photos.getPhotoMetadata();
// Get the first photo in the list.
PlacePhotoMetadata photoMetadata = photoMetadataBuffer.get(0);
// Get the attribution text.
CharSequence attribution = photoMetadata.getAttributions();
// Get a full-size bitmap for the photo.
Task<PlacePhotoResponse> photoResponse = mGeoDataClient.getPhoto(photoMetadata);
photoResponse.addOnCompleteListener(new OnCompleteListener<PlacePhotoResponse>() {
@Override
public void onComplete(@NonNull Task<PlacePhotoResponse> task) {
PlacePhotoResponse photo = task.getResult();
bitmap = photo.getBitmap();
ImageView imageView = mWindow.findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);
imageView.refreshDrawableState();
}
});
} catch (IllegalStateException e) {
Log.e("aaa", "onComplete: IllegalStateException: " + e.getMessage() );
}
}
});
return bitmap;
}
我将它放入一个函数中以获取信息:
private void rendowWindowText (Marker marker, View view) {
String title = marker.getTitle();
TextView tvTitle = view.findViewById(R.id.txt_title);
if (!title.equals("")) {
tvTitle.setText(title);
}
String snippet = marker.getSnippet();
TextView tvSnippet = view.findViewById(R.id.txt_snippet);
if (!title.equals("")) {
tvSnippet.setText(snippet);
}
getPhotos();
}
现在我的问题是当我搜索一个地方并点击按钮以显示标记的信息时,我的 imageview 什么都不是:
当我单击该按钮关闭窗口并再次单击以显示标记的信息时,图像被加载:
有人可以告诉我如何解决这个问题吗?非常感谢!
解决方案
试试这个,它可能对你有帮助
private void rendowWindowText (Marker marker, View view) {
String title = marker.getTitle();
TextView tvTitle = view.findViewById(R.id.txt_title);
ImageView imageView = view.findViewById(R.id.imageView);
if (!title.equals("")) {
tvTitle.setText(title);
}
String snippet = marker.getSnippet();
TextView tvSnippet = view.findViewById(R.id.txt_snippet);
if (!title.equals("")) {
tvSnippet.setText(snippet);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(getPhotos())
}
});
}
//And getPhotots() like this,
private Bitmap getPhotos() {
Task<PlacePhotoMetadataResponse> photoMetadataResponse = mGeoDataClient.getPlacePhotos(Maps.mPlace.getId());
photoMetadataResponse.addOnCompleteListener(new OnCompleteListener<PlacePhotoMetadataResponse>() {
@Override
public void onComplete(@NonNull Task<PlacePhotoMetadataResponse> task) {
try {
// Get the list of photos.
PlacePhotoMetadataResponse photos = task.getResult();
// Get the PlacePhotoMetadataBuffer (metadata for all of the photos).
PlacePhotoMetadataBuffer photoMetadataBuffer = photos.getPhotoMetadata();
// Get the first photo in the list.
PlacePhotoMetadata photoMetadata = photoMetadataBuffer.get(0);
// Get the attribution text.
CharSequence attribution = photoMetadata.getAttributions();
// Get a full-size bitmap for the photo.
Task<PlacePhotoResponse> photoResponse = mGeoDataClient.getPhoto(photoMetadata);
photoResponse.addOnCompleteListener(new OnCompleteListener<PlacePhotoResponse>() {
@Override
public void onComplete(@NonNull Task<PlacePhotoResponse> task) {
PlacePhotoResponse photo = task.getResult();
bitmap = photo.getBitmap();
}
});
} catch (IllegalStateException e) {
Log.e("aaa", "onComplete: IllegalStateException: " + e.getMessage() );
}
}
});
return bitmap;
}
推荐阅读
- google-chrome - pushsubscriptionchange 在 Edge、chrome、opera 和 firefox 中不起作用。谁能告诉我我做错了什么?
- azure-ad-b2c - 自助密码重置(嵌入式密码重置示例)不会使用用户已在电子邮件字段中输入的内容预填充电子邮件字段
- python - 如何根据数据框中的条件将元素保留在列表中?
- sql - 空表视图
- c# - 按钮多点单击问题 Xamarin.Forms
- c# - Qt 的 qChecksum 里面是什么?
- bash - 在 shell 脚本中使用 curl 创建名称变量并运行 for 循环以将文件内容添加到 api,但仅添加名称
- java - 为什么 java 中的 try/catch 不适用于我的案例?
- amazon-web-services - 无法使用 aws cloudformation select 和 findinmap
- postgresql - 创建备份作业后没有任何反应