前提・実現したいこと
まだ解決ができていません……。
質問内容で、おかしなところがあれば遠慮なくおっしゃっていただければわかる範囲で書きますので。
monacaでHTML5を使用したマルチプラットフォーム対応のモバイルアプリ開発を行っています。
GoogleMapsAPIを使用したマップ情報をローカルストレージに格納したいです。
しかし、下記エラーがでて困っています。
発生している問題・エラーメッセージ
iOSではエラーが出ずに動作しており、Androidでのみエラーがでます。
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable.
現在使用できない、あるいは使用できなくなったオブジェクト?
というエラーなのですが、使用できないという感覚もわからず、
対処法に困っています。
なぜiOSでは良くて(対応ができて)Androidではダメなのかも理解ができていません。
その辺りを中心にご教授いただけると大変有難いです。
試したこと
該当のソースコードでは以下のエラーが出現しました。
TypeError: Converting circular structure to JSON
循環オブジェクト参照構造体を文字列に変換できないということでした。
参考ページ
上記のエラーをなくすために参考ページを参考に
循環オブジェクト参照をチェックする記述を導入するとiOSではエラーがなくなり、
意図した動作を行うことができました。
修正前のソースコード
Javascript
1//地図の表示 2function createMap(){ 3 var map = new google.maps.Map( 4 document.getElementById('map_canvas'), 5 { 6 center: (new google.maps.LatLng(00.000, 000.0000)),//中心を指定 7 zoom: 18, // 地図のズーム 8 streetViewControl: false, //ストリートビュー 9 mapTypeControl: false, //mapタイプの切り替え 10 fullscreenControl: false, //フルスクリーン切り替え 11 zoomControl: true, //ズームコントロール 12 zoomControlOptions: false, //ズームボタン 13 styles: [{// マップのアイコン系の非表示 14 featureType: 'poi.business', 15 stylers: [{visibility: 'off' }] 16 }] 17 } 18 ); 19 //マップ情報登録 20 localStorage.setItem('map', JSON.stringify(map)); 21};
修正後のソースコード
Javascript
1//地図の表示 2function createMap(){ 3 var map = new google.maps.Map( 4 document.getElementById('map_canvas'), 5 { 6 center: (new google.maps.LatLng(00.000, 000.0000)),//中心を指定 7 zoom: 18, // 地図のズーム 8 streetViewControl: false, //ストリートビュー 9 mapTypeControl: false, //mapタイプの切り替え 10 fullscreenControl: false, //フルスクリーン切り替え 11 zoomControl: true, //ズームコントロール 12 zoomControlOptions: false, //ズームボタン 13 styles: [{// マップのアイコン系の非表示 14 featureType: 'poi.business', 15 stylers: [{visibility: 'off' }] 16 }] 17 } 18 ); 19 //マップ情報登録 20 seen = []; 21 var replacer = function(key, value) { 22 if (value != null && typeof value == "object") { 23 if (seen.indexOf(value) >= 0) { 24 return; 25 } 26 seen.push(value); 27 } 28 return value; 29 }; 30 localStorage.setItem('map', JSON.stringify(map, replacer)); 31};
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。