PR

このサイトは、広告などを含みます。

最終更新日:

android用GoogleMapApiV2でマーカーを表示するのにassetsから画像を読むとエラーになる

 当方のへっぽこ地図アプリである「どっちだべ」で最近経路探索結果の表示を行うとエラーになって表示されなくなってしまった。

エラー、例外発生


  何故かなぁ?と思ってデバッグするもどうもaddMarkerを行うと「com.google.android.gms.maps.internal.IGoogleMapDelegate」にある「addMarker」で(Unknown Source)」というエラーが出ているようです。
  「あんた、不明な画像を読み込ませただろ!」という意味だと思いますが「BitmapDescriptorFactory.fromAsset()」の戻り値は、ちゃんとアドレス帰って来ているのと、この症状の面倒なところは、1回目は、問題なく表示されるという点。
  そう、マーカーをremoveしたりマップオブジェクトでclearした後に再度マーカーを再描画するとエラーになるのです。
  まぁ、そう聞くと多くの方は、画像データが壊れているのでは?とかちゃんとデータ破棄してないのでは?または、C言語頭の人は、ポインタが壊れているとか思うかもしれませんけどJavaですから・・・。
  「一度使用し開放した領域の再利用は、できません。」とか画像関連の何かのapiの説明にあった気もしますがメモリ割り当ては、JavaVMが勝手にやるでしょ。人間様は、何も出来ないでしょ。 

調査


 困ってしまい検索すると日本語では、全然情報ありません。
 が、英語では、数件掲示板みたいなところがありました。日本人ダメすぎ。
 少なくとも英語圏には、同じ悩みを持つ同志が居るようです。ちょっと安心。

  で、読んでみるとどれもこれも・・・結論に達していません。
  ただ、DrawableにすればOKだよ。というのが脱出経路への一筋の光のような気がした為実験。  BitmapDescriptorFactoryには、画像読み込みのapiが複数あるので今度は、「BitmapDescriptorFactory.fromDrawable()」を使用します。

  すると・・・  問題なし???

  どうした事でしょう。確かに問題なく動作します。なんで?

  不思議なので更に調査しますが有効な情報は、見つかりません。皆、袋小路に入り込み回答が終わっています。
  とりあえず「fromDrawable()」でも問題無さそうですが「fromAsset()」に問題があったのだからapi内で画像展開するのは、怖いので今は、自前でBitmapを生成してから「BitmapDescriptorFactory.fromBitmap()」でロードしています。意味があるのか?と言われると分かりません。

発見


  どうやら「BitmapDescriptorFactory.fromAsset()」には、ライブラリレベルでバグがあるらしいです。

参照:
gmaps-api-issues「Bug: aadMarker api is not working always throwing exception
(addの綴り間違ってるぞ。)

  当方のスマホは、IS12SというOSのバージョンがandroid4.0.4という古いものを使用しています。このIS12Sでは、漏れ無くエラーが再現します。

  開発は、Genymotion上でandroid4.3仮想マシンを使用しているのですがこちらでは、問題なく動作していました。
  なのでOSバージョンによっても動作に違いがあるのかと思いとりあえずGenymotion上で他のバージョンのOSも試してみます。
  どうやら4.3、4.4では、問題がないようです。4.0以降4.2.2までは、ダメです。動きません。なので4.3以降の端末を使用している人は、不具合に合わなかったのでしょう。

  当方も開発は、4.3上で行なって居たので気づきませんでした。IS12Sで動作させて「どっちだべ」は、任意の地点にアイコンを表示させられるのでそのアイコンを表示(常に表示状態の場合)して経路探索を一度行い再度経路探索を行うと落ちるみたいです。
  ただ、地点アイコンの情報が何もない新規インストールの状態だと発現しないので当方が気づかなかったのは、仕方ないでしょう。うん。

結論

android用GoogleMap Api V2でマーカーを表示するのにassetから画像を読むとエラーになるに関しては、

全部、Googleの責任♪

0 件のコメント :

コメントを投稿