2018/02/16

BitmapDescriptorFactory.fromResource() で "IBitmapDescriptorFactory is not initialized" が起こる場合の対処方法

@play-services-maps:11.8.0



### 対策1 onMapReady() が呼ばれたのを確認する
IBitmapDescriptorFactory がいつ初期化されるのかというと、Google Map の用意が出来た時です。
なので、`onMapReady(GoogleMap)` が呼ばれた後であればこのエラーはおきません。

```java
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        // その他処理
    }

    private void setMarker() {
        if (mMap == null) {
            return;
        }
         
        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.arrow);
        // Marker の更新など
    }
```

私の場合、GPS のロケーション情報が届いた段階で、`fromResource()` しようとして、落ちました。
「GPS 情報の更新」と「Marker の更新」は分離しておくべきすね初歩的なミスだな…。


### 対策2 MapsInitializer.initialize(getApplicationContext()) を呼ぶ
`onCreate()` 等で `MapsInitializer.initialize(getApplicationContext())` を呼んでしまうという手もあります。

> 参考
>
> [android - "IBitmapDescriptorFactory is not initialized" error - Stack Overflow](https://stackoverflow.com/a/13968128)

個人的には、この方法はちょっと強引かなと思います。
Map の準備ができていないと Marker を生成しても意味が無いですからね。

0 件のコメント: