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;
}
}
,
당신이 옳았습니다. 원래의 문제는 위도 해석을 제대로 할 수 없다는 것이 었습니다. 나는 지금 생각할 수있는 코드를 업데이트했다. 그러나 어떤 이유로 그것이 작동하지 않을 것이라고 생각했다. java.lang.NullPointerException이 발생합니다. 위 코드는 업데이트 된 코드입니다. 어떤 도움이라도 대단히 감사합니다. – BlakeJ
그래서 NULLPointerException의 srouce를 발견했습니다. "mymap"이 참조 될 때마다 어떤 이유로 mymap에 대한 null이 반환됩니다. 이유는 무엇입니까? – BlakeJ