首页 > 解决方案 > 在 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 什么都不是:

我的xml中的绿色背景

当我单击该按钮关闭窗口并再次单击以显示标记的信息时,图像被加载:

在此处输入图像描述

有人可以告诉我如何解决这个问题吗?非常感谢!

标签: androidgoogle-maps-markersandroid-mapview

解决方案


试试这个,它可能对你有帮助

 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;
}

推荐阅读