解析存储在内部存储器中的XML

问题描述:

我在内部存储器中创建了名为“temp.gpx”的XML文件,现在我想分析它。我用这种方法来解析并获得GPS坐标和其他东西。检测到DOCUMENT_START(它的Log.d行被写入),但是我得到一个异常,没有任何线索导致它的确切线索。解析存储在内部存储器中的XML

异常是“无法添加窗口:令牌null不适用于应用程序”。 Log.d(TAG,“下一个”)从不写入。

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); 
} 

代码是正确的。经过很多调试之后,当第一行仍然不是XML行时,我发现它崩溃了。只要你关心只传递XML行,代码就可以工作。我会接受答案,以便任何需要代码的人都可以得到它,