0

xml ファイルからハッシュマップに入れようとしている 4 つの値があります。問題なくxmlを解析できますが、データを取得して、緯度/経度を介してマップにポイントを配置したいと考えています。プルパーサーからハッシュマップを作成しようとしていますが、失敗しています。私が思うハッシュマップをどこに入力するかについて問題が発生しています。

ここに私のハッシュマップがあります:

Map<Integer, MapMarkers> DataLocations = new HashMap<Integer, MapMarkers>();

これが私のMapMarkersクラスです:

public class MapMarkers {
    private String lon;
    private String lat;
    private String title;
    private String desc;

    public MapMarkers() {
        super();
    }

    public MapMarkers(String lon, String lat, String title, String desc) {
        super();
        this.lon = lon;
        this.lat = lat;
        this.title = title;
        this.desc = desc;
    }

    public String getLon() {
        return lon;
    }

    public void setLon(String lon) {
        this.lon = lon;
    }

    public String getLat() {
        return lat;
    }

    public void setLat(String lat) {
        this.lat = lat;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}

xml が大きいため、非同期で実行されているプルパーサーを次に示します。

public class BuildMapInfoTask extends AsyncTask { String sname = null; 文字列 sdesc = null; 文字列スラット = null; 文字列 slon = null;

    @Override
    protected String doInBackground(String... params) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory
                    .newInstance();
            factory.setValidating(false);
            XmlPullParser myxml = factory.newPullParser();
            FileInputStream fs = new FileInputStream(
                    "/storage/emulated/0/snoteldata/kml/snotelwithlabels.kml");
            myxml.setInput(fs, null);
            int eventType = myxml.getEventType();
            int uniquekey = 0;
            marks = new MapMarkers(slat, slon, sname, sdesc);
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG) {
                    String tag = myxml.getName();
                    if ("name".equals(tag)) {
                        sname = myxml.nextText().trim();
                        marks.setTitle(sname);
                    } else if ("description".equals(tag)) {
                        sdesc = myxml.nextText().trim();
                        marks.setDesc(sdesc);
                    } else if ("longitude".equals(tag)) {
                        slon = myxml.nextText().trim();
                        marks.setLon(slon);
                    } else if ("latitude".equals(tag)) {
                        slat = myxml.nextText().trim();
                        marks.setLat(slat);
                    }
                    Log.v("ET",uniquekey+"");
                    DataLocations.put(uniquekey, marks);
                    uniquekey++;
                }
                eventType = myxml.next();
            }
        } catch (XmlPullParserException e) {
            Log.e("PP Error", e.getMessage());
        } catch (IOException e) {
            Log.e("PP IOException", e.getMessage());
        }
        return null;

    }

KEY として uniquekey を作成し、[値] 領域に lat、lon、title、desc をロードしました...値が入力されていません。これを DataLocations に入力するには、PullParser 内のどこで DataLocations.put(...) を実行する必要がありますか? これはすべて間違っていますか?

4

1 に答える 1

0

各ループ スルーで新しいマーカー オブジェクトを作成しませんでした。これは私のために働いた:

 try {
            markerInfo = new HashMap<Marker, MapMarkers>();
            File fXmlFile = new File(
                    "/storage/emulated/0/data/kml/labels.kml");

            DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);

            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("Placemark");

            for (int temp = 0; temp < nList.getLength(); temp++) {
                // must make new each time around...
                MapMarkers marks = new MapMarkers();

                Node nNode = nList.item(temp);

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;

                    String name = eElement.getElementsByTagName("name").item(0)
                            .getTextContent();

                    String desc = eElement.getElementsByTagName("description")
                            .item(0).getTextContent();

                    String lon = eElement.getElementsByTagName("longitude")
                            .item(0).getTextContent();

                    String lat = eElement.getElementsByTagName("latitude")
                            .item(0).getTextContent();

                    lon = lon.trim();
                    lat = lat.trim();

                    double lati = Double.parseDouble(lat);
                    double lngi = Double.parseDouble(lon);

                    marks.setTitle(name);
                    marks.setDesc(desc);

                    Marker m = map.addMarker(new MarkerOptions()
                            .position(new LatLng(lati, lngi))
                            .title(marks.getTitle())
                            .icon(BitmapDescriptorFactory
                                    .fromResource(R.drawable.youmarker)));

                    markerInfo.put(m, marks);

                    map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
                        @Override
                        public void onInfoWindowClick(Marker marker) {

                            MapMarkers eventInfo = markerInfo.get(marker);

                            msg(Html.fromHtml(eventInfo.getDesc()));

                            // Log.e("ID", marker.getId());
                            // Log.v("EI", eventInfo.getTitle() + " ----- "
                            // + eventInfo.getDesc());

                        }

                    });

                }

            }

        } catch (Exception e) {
            Log.e("Data Buildmap Error", e.getMessage());
        }
于 2013-09-15T21:36:46.843 に答える