2011-11-15 3 views
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); 
} 

답변

0

코드가 맞습니다. 많은 디버깅 후에 첫 번째 줄이 여전히 XML 줄이 아닐 때 충돌이 발생한다는 것을 알았습니다. XML 행 만 전달하면 코드가 작동합니다. 나는 코드를 필요로하는 누군가가 그것을 얻을 수 있도록 대답을 수락 할 것이다.