0

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 などでは表示されないのはなぜですか? 他のデバイスで問題が発生している場所を特定するにはどうすればよいですか?

4

2 に答える 2

0

こうすれば

public void BuildMap() {

        final Handler mHandler = new Handler();

        new Thread(new Runnable() {

            @Override
            public void run() {
                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) {
                        final 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);

                        mHandler.post(new Runnable() {

                            @Override
                            public void run() {

                                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());
                }
            }
        }).start();

    }
于 2013-09-27T04:12:52.220 に答える