java - Mapbox,MapSnapshotter.callback 并不总是被调用

标签 java android callback mapbox android-mapview

我主要在我的项目中使用 mapbox,但在一个实例中,我需要在 recyclerView 中显示 map 。为此,我考虑使用 MapSnapshotter 而不是静态 Map Api,因为用户可能没有连接。

不幸的是,在进行测试时,我无法使 MapSnapshotter.callback 正常工作。有时会加载/创建图像,而有时则不会,感觉确实是随机的。

 Mapbox.getInstance(this, MyMapbox.getToken());
 mapView.onCreate(savedInstanceState);
 mapView.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(MapboxMap mapboxMap) {
            map = mapboxMap;
            MapSnapshotter.Options options = new MapSnapshotter.Options(mapView.getMeasuredWidth(),mapView.getMeasuredHeight());
            options.withRegion(mapboxMap.getProjection().getVisibleRegion().latLngBounds);
            options.withStyle(mapboxMap.getStyleUrl());

            MapSnapshotter mapSnapshotter = new MapSnapshotter(getContext(), options);

            mapSnapshotter.start(new MapSnapshotter.SnapshotReadyCallback() {
                @Override
                public void onSnapshotReady(MapSnapshot snapshot) {
                    Log.i(LOG_TAG, "onSnapshotReady");
                    Bitmap bitmap = snapshot.getBitmap();
                    imageview.setImageBitmap(bitmap);
                }

            }, new MapSnapshotter.ErrorHandler() {
                @Override
                public void onError(String error) {
                    Log.i(LOG_TAG, error);
                }
            });
        }
    });

最佳答案

所以经过一番折腾,我终于弄明白了。
问题是 MapSnapshotter.start 是一个异步任务,因为手机在第一次启动时在回收站 View 中加载了 3 个项目,而每个项目都在同一个线程中调用 MapSnapshotter.start在上一个完成之前,所以取消它。这解释了为什么只有最后一个项目加载了图像。

解决这个问题的方法是让Async任务变成Sync,但我不推荐这个方案。

另一种方法是在您的适配器中添加一个属性 MapSnapshotter。这样做,您的每个项目都将拥有自己的 MapSnapshotter。

关于java - Mapbox,MapSnapshotter.callback 并不总是被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51067731/

相关文章:

java - 服务器套接字不接受客户端

Java 从另一个类获取选定的组合框

android - 应用内结算 Google TV

java - JSF 2.0 AJAX 重新呈现的 ID 数量多于我指定的 ID。不确定我是否有根本性的误解或只是一个错误

java - 使用 Jackson 从 JSON 中获取单个字段

android - 在android中生成设计师二维码

android - 使用参数以编程方式添加按钮?

ruby-on-rails-3 - 如何使用 RSpec 在 after_save 回调中测试类初始化?

flutter - 如何在 Flutter 中传递回调

php - 在 PHP 中实现一个简单的准备好的查询