gmap v2にロードしようとしている約1700個のマーカーを含むファイルがあります。4.2.2 を実行している私の Galaxy nexus では問題なくロードされますが、4.0.x と 4.1.x を使用している人の中には同じ結果が得られない人もいます。彼らは地図を取得しますが、ポイントがないか、約 30 秒後にアプリがクラッシュします。ローカルファイルを読み込んでいます...
これが私の方法です:
public void BuildMap() {
FileInputStream fXmlFile;
markerInfo = new HashMap<Marker, MapMarkers>();
try {
fXmlFile = new FileInputStream(
"/storage/emulated/0/snoteldata/kml/snotelwithlabels.kml");
XmlDom xml = new XmlDom(fXmlFile);
List<XmlDom> locations = xml.tags("Placemark");
String Name, Description, Lat, Lon;
markerInfo = new HashMap<Marker, MapMarkers>();
for (XmlDom location : locations) {
MapMarkers marks = new MapMarkers();
Name = location.tag("name").text();
Description = location.tag("description").text();
Lat = location.tag("latitude").text();
Lon = location.tag("longitude").text();
la = Float.parseFloat(Lat);
lo = Float.parseFloat(Lon);
marks.setTitle(Name);
marks.setDesc(Description);
Marker m = map.addMarker(new MarkerOptions()
.position(new LatLng(la, lo))
.title(marks.getTitle())
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.snotel_marker)));
markerInfo.put(m, marks);
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
MapMarkers markInfo = markerInfo.get(marker);
Intent i = new Intent(MainActivity.this,
MarkerInformation.class);
i.putExtra("name", markInfo.getTitle()).putExtra(
"description", markInfo.getDesc());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
}
} catch (SAXException e) {
// TODO Auto-generated catch block
Log.e("SAXException", e.getMessage());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
Log.e("FileNotFoundException", e.getMessage());
}
}
これを AsyncTask に入れようとしましたが、毎回 Not on Main Thread エラーが発生します...そのため、バックグラウンドで実行して、解析が完全に行われるまでロードし続ける方法がわかりません。
Gnex と Nexus 7 タブレットでは表示されるのに、4.0.x などでは表示されないのはなぜですか? 他のデバイスで問題が発生している場所を特定するにはどうすればよいですか?