2011-01-08 5 views
0

웹 페이지에서 파싱 된 XML과 결합 할 때까지 작동했습니다. 마커는 추가되지 않지만 오류는 발생하지 않습니다. 아래는 새로운 코드입니다. 어떤 도움이라도 대단히 감사합니다!안드로이드지도 오버레이가 제대로 작동하지 않습니다.

LocationBasedServicesV2.java :

private MapView myMap; 
private TextView tv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView) findViewById(R.id.tv); 
    try { 
      URL url = new URL("MySiteGoesHere"); 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 
      ExampleHandler myExampleHandler = new ExampleHandler(); 
      xr.setContentHandler(myExampleHandler); 
      xr.parse(new InputSource(url.openStream())); 
      ParsedExampleDataSet parsedExampleDataSet = myExampleHandler.getParsedData(); 
      tv.setText(parsedExampleDataSet.toString()); 
    } catch (Exception e) { 
     new AlertDialog.Builder(this) 
     .setMessage(e.toString()) 
     .setTitle("error") 
     .setCancelable(true) 
     .setNeutralButton(android.R.string.cancel, 
      new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton){} 
      }) 
     .show(); 
    } 


    initMap(); 
    //initLocationManager(); 
} 
private void initMap() { 
    myMap = (MapView) findViewById(R.id.mymap); 

    View zoomView = myMap.getZoomControls(); 
    LinearLayout myzoom = (LinearLayout) findViewById(R.id.myzoom); 
    myzoom.addView(zoomView); 
    myMap.displayZoomControls(true); 

} 
/*private void initLocationManager() { 
    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locListener = new LocationListener() { 
     public void onLocationChanged(Location newLocation) { 
      createAndShowMyItemizedOverlay(newLocation); 
     } 
     public void onProviderDisabled(String arg0) { 
     } 
     public void onProviderEnabled(String arg0) { 
     } 
     public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
     } 
    }; 
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
      locListener); 
}*/ 
public void createAndShowMyItemizedOverlay(int Lat,int Long) { 
    //int Lat2; 
    //int Long2; 
    //Lat2 = Integer.parseInt(Lat); 
    //Long2 = Integer.parseInt(Long); 
    List overlays = myMap.getOverlays(); 
    GeoPoint geopoint = new GeoPoint(Lat,Long); 
    Drawable icon = getResources().getDrawable(R.drawable.icon); 
    icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon 
      .getIntrinsicHeight()); 
    MyItemizedOverlay overlay = new MyItemizedOverlay(icon); 
    OverlayItem item = new OverlayItem(geopoint, "My Location", null); 
    overlay.addItem(item); 
    myMap.getOverlays().add(overlay); 
    myMap.getController().animateTo(geopoint); 

     } 
@Override 
protected boolean isRouteDisplayed() { 
    return false; 
} 
} 

MyItemizedOverlay.java :

public class MyItemizedOverlay extends ItemizedOverlay { 
private List items; 
private Drawable marker; 
public MyItemizedOverlay(Drawable defaultMarker) { 
    super(defaultMarker); 
    items = new ArrayList(); 
    marker = defaultMarker; 
} 
@Override 
protected OverlayItem createItem(int index) { 
    return (OverlayItem)items.get(index); 
} 
@Override 
public int size() { 
    return items.size(); 
} 
@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    super.draw(canvas, mapView, shadow); 
    boundCenterBottom(marker); 
} 
public void addItem(OverlayItem item) { 
    items.add(item); 
    populate(); 
} 
} 

ExampleHandler.java :

public class ExampleHandler extends DefaultHandler{ 

    private boolean in_lat = false; 
    private boolean in_long = false; 
    private boolean in_retailer = false; 

    private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet(); 


    public ParsedExampleDataSet getParsedData() { 
      return this.myParsedExampleDataSet; 
    } 

    @Override 
    public void startDocument() throws SAXException { 
      this.myParsedExampleDataSet = new ParsedExampleDataSet(); 
    } 

    @Override 
    public void endDocument() throws SAXException { 
      // Nothing to do 
    } 


    @Override 
    public void startElement(String namespaceURI, String localName, 
        String qName, Attributes atts) throws SAXException { 
      if (localName.equals("Lat")) { 
        this.in_lat = true; 
      }else if (localName.equals("Long")) { 
       this.in_long = true; 
      } 

    } 


    @Override 
    public void endElement(String namespaceURI, String localName, String qName) 
        throws SAXException { 
      if (localName.equals("Lat")) { 
        this.in_lat = false; 
      }else if (localName.equals("Long")) { 
       this.in_long = false;} 
      else if (localName.equals("Retailer")) { 
       this.in_retailer = false;} 
    } 

    @Override 
    public void characters(char ch[], int start, int length) { 
      if(this.in_lat){ 
      myParsedExampleDataSet.setExtractedString(new String(ch, start, length));} 
      else if(this.in_long){ 
       myParsedExampleDataSet.setExtractedString2(new String(ch, start,  length));} 

} 
} 

ParsedExampleDataSet.Java :

public class ParsedExampleDataSet extends LocationBasedServicesV2 { 
private String extractedString = null; 
private String OLDextractedString = null; 
String Long; 
String Lat; 
Double Long2; 
Double Lat2; 
int Lat3; 
int Long3; 

public void setExtractedString(String extractedString) { 
     Long = extractedString; 
     Long2 = Double.parseDouble(Long); 
     Long3 = (int) (Long2 * 1E6); 
     /*if (OLDextractedString != null){ 
     this.extractedString = OLDextractedString + extractedString + ',' ; 
    } 
    else 
    { 
     this.extractedString = extractedString + ',' ; 
    } 
     OLDextractedString = this.extractedString;*/ 
} 
public void setExtractedString2(String extractedString) { 
    Lat = extractedString; 
    Lat2 = Double.parseDouble(Lat); 
    Lat3 = (int) (Lat2 * 1E6); 
    createAndShowMyItemizedOverlay(Lat3,Long3); 
    /*if (OLDextractedString != null){ 
    * 
     this.extractedString = OLDextractedString + extractedString + '\n' ;  
    } 
    else 
    { 
     this.extractedString = OLDextractedString + '\n' + extractedString ; 
    } 
    OLDextractedString = this.extractedString;*/ 
} 
    public int parseInt(){ 

     return Lat3; 

} 
} 
,

답변

0

확인할 사항 : createAndShowMyItemizedOverlay() 메서드는 ParsedExampleDataSet이 만들어 질 때만 호출되는 것처럼 보입니다.이 메서드는 예외를 삼키고있는 try/catch에서 만들어집니다. 이것은 왜 당신이 오류를 보지 못했고 xml을 파싱하기 시작했을 때 왜 멈추는 지 이유가 될 수 있습니다.

+0

당신이 옳았습니다. 원래의 문제는 위도 해석을 제대로 할 수 없다는 것이 었습니다. 나는 지금 생각할 수있는 코드를 업데이트했다. 그러나 어떤 이유로 그것이 작동하지 않을 것이라고 생각했다. java.lang.NullPointerException이 발생합니다. 위 코드는 업데이트 된 코드입니다. 어떤 도움이라도 대단히 감사합니다. – BlakeJ

+0

그래서 NULLPointerException의 srouce를 발견했습니다. "mymap"이 참조 될 때마다 어떤 이유로 mymap에 대한 null이 반환됩니다. 이유는 무엇입니까? – BlakeJ

관련 문제