2018/02/16

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

@play-services-maps:11.8.0

対策1 onMapReady() が呼ばれたのを確認する

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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 の更新」は分離しておくべきすね1

対策2 MapsInitializer.initialize(getApplicationContext()) を呼ぶ

onCreate() 等で MapsInitializer.initialize(getApplicationContext()) を呼んでしまうという手もあります。

参考

android - "IBitmapDescriptorFactory is not initialized" error - Stack Overflow

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

  1. 初歩的なミスだな… 
?

0 件のコメント: