0
내부 저장소에 "temp.gpx"라는 XML 파일을 만들었으므로 구문 분석하려고합니다. 나는이 방법을 사용하여 파싱을하고 GPS 좌표와 다른 것들을 얻는다. DOCUMENT_START가 감지되면 (Log.d 라인이 기록됨), 어떤 정확한 라인이 원인인지에 대한 단서도없이 예외가 발생합니다.내부 메모리에 저장된 XML 구문 분석
예외는 "창을 추가 할 수 없습니다 : 응용 프로그램에 대해 토큰 null이 없습니다"입니다. Log.d (TAG, "next")는 기록되지 않습니다.
private void procesarGPX() throws XmlPullParserException, IOException {
String tag = new String();
float lat, lon;
trackData = new TrackData(true, true);
FileInputStream leerFichero = getApplicationContext().openFileInput("temp.gpx");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(leerFichero, null);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){
if(eventType == XmlPullParser.START_DOCUMENT){
Log.d(TAG, "START_DOC");
}
else if(eventType == XmlPullParser.START_TAG){
Log.d(TAG, "START_TAG");
tag = xpp.getName();
if(tag.equals("name")) boolName = true;
else if(tag.equals("trkpt")){
lat = Float.parseFloat(xpp.getAttributeValue(null, "lat"));
lon = Float.parseFloat(xpp.getAttributeValue(null, "lon"));
if(lat*(-1)<=180 && lon*(-1)<=180) trackData.addPoint(new GeoPoint((int)(lat*1E6), (int)(lon*1E6)));
}
else if(tag.equals("ele")) boolEle = true;
else if(tag.equals("time")) boolTime = true;
else if(tag.equals("gpx")){
Log.d(TAG, "START_TAG es del tipo gpx");
trackData.setAutor(xpp.getAttributeValue(null, "creator"));
trackData.setVersion(xpp.getAttributeValue(null, "version"));
}
}
else if(eventType == XmlPullParser.END_TAG){
Log.d(TAG, "END_TAG");
if(tag.equals("name")) boolName = false;
else if(tag.equals("ele")) boolEle = false;
else if(tag.equals("time")) boolTime = false;
}
else if(eventType == XmlPullParser.TEXT){
Log.d(TAG, "TEXT");
if(boolName) trackData.setName(xpp.getText());
else if(boolEle) trackData.addElevationValue(Float.parseFloat(xpp.getText()));
else if(boolTime) parseTime(xpp.getText());
}
eventType = xpp.next();Log.d(TAG, "next()");
}
Log.d(TAG, "GPX processed");
Intent mapaIntent = new Intent(this, pfc.uniovi.MapaActivity.class);
startActivity(mapaIntent);
}