парсинг XML-файла для добавления маркера в приложение google-map - PullRequest
0 голосов
/ 01 апреля 2012

У меня проблема с добавлением маркера из файла XML

это мой XML-файл

<PA>
<node>
    <id>1</id>
    <nama>SMP 8  Cimahi</nama>
    <longitude>-6.894581</longitude>
    <latitude>107.536519</latitude>
    <kategori>sekolah</kategori>
</node>

я хочу проанализировать значение долготы и широты с помощью анализатора DOM

это часть моего кода в файле активности

 try {

         DocumentBuilderFactory DBF;
            DocumentBuilder DB;
            Document dom;
            Element elt;

            DBF = DocumentBuilderFactory.newInstance();
            DB = DBF.newDocumentBuilder();
            dom = DB.parse(new InputSource(getAssets().open("database.xml")));
            elt = dom.getDocumentElement(); 

        NodeList nodeList = elt.getElementsByTagName("node");
        for (int i = 0; i < nodeList.getLength(); i++) {

            Node node = nodeList.item(i);

            Element fstElmnt = (Element) node;
                            NodeList longList = fstElmnt.getElementsByTagName("longitude");
            Element longElement = (Element) longList.item(0);
            longList = longElement.getChildNodes();

            int lng = ((int) (Double.parseDouble(longList.item(0).getNodeValue()) *1E6));


            NodeList latList = fstElmnt.getElementsByTagName("latitude");
            Element latElement = (Element) latList.item(0);
            latList = latElement.getChildNodes();

            int lat = ((int) (Double.parseDouble(latList.item(0).getNodeValue()) *1E6));

            List<Overlay> mapOverlays = mapView.getOverlays();
            Drawable drawable = this.getResources().getDrawable(R.drawable.school);
            markerpeta itemizedoverlay = new markerpeta(drawable,this);

            GeoPoint point = new GeoPoint(lat,lng);
            OverlayItem overlayitem = new OverlayItem(point, "", null);

            itemizedoverlay.addOverlay(overlayitem);
            mapOverlays.add(itemizedoverlay);

это мой маркерпета класс

public class markerpeta extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlay = new ArrayList<OverlayItem>();
private Context mContext;
//private peta peta;

public markerpeta(Drawable defaultMarker) {
    super(boundCenterBottom(defaultMarker));
    // TODO Auto-generated constructor stub
}

public markerpeta(Drawable defaultMarker, Context context) {
    super(boundCenterBottom(defaultMarker));
    mContext = context;
    // TODO Auto-generated constructor stub
}

public void addOverlay(OverlayItem overlay){
    mOverlay.add(overlay);
    populate();

}

@Override
protected OverlayItem createItem(int i) {
    // TODO Auto-generated method stub
    return mOverlay.get(i);
}

@Override
public int size() {
    // TODO Auto-generated method stub
    return mOverlay.size();
}

 @Override
        protected boolean onTap(int index) {
          OverlayItem item = mOverlay.get(index);
          AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
          dialog.setTitle(item.getTitle());
          dialog.setMessage(item.getSnippet());
          dialog.setPositiveButton("Close", new OnClickListener() {

                public void onClick(DialogInterface arg0, int arg1) {
                    arg0.dismiss();
             }
            });
          dialog.show();
          return true;
        }

}

в этом коде нет ошибки, но в приложении нет маркера, кто-нибудь может мне помочь? спасибо

1 Ответ

0 голосов
/ 01 апреля 2012

В вашем классе markerpeta добавьте ниже метод

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
 // TODO Auto-generated method stub
 super.draw(canvas, mapView, shadow);           
}

также замените две строки ниже, попробуйте

Drawable drawable = this.getResources().getDrawable(R.drawable.school);
markerpeta itemizedoverlay = new markerpeta(drawable,this);

с

Drawable drawable = getApplicationContext (). GetResources (). GetDrawable (R.drawable.school); markerpeta itemizedoverlay = new markerpeta (drawable, getApplicationContext ());

...