Autore Topic: XmlPullParser non si ferma mai  (Letto 402 volte)

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
XmlPullParser non si ferma mai
« il: 19 Dicembre 2013, 14:04:00 CET »
0
Salve. In base a ciò che ho detto nell'altro thread ho riscritto il parser utilizzando XmlPullParser. Ecco il codice:

Codice: [Seleziona]
protected Void doInBackground(File... files) {

            try {

                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
                XmlPullParser parser = factory.newPullParser();
                parser.setInput(new FileInputStream(files[0]),null);

                double lat = 0;
                double lon = 0;
                double alt = 0;

                int eventType = parser.getEventType();

                while(eventType != XmlPullParser.END_DOCUMENT) {

                    switch(eventType) {

                        case XmlPullParser.START_TAG:

                            String tagName = parser.getName();

                            Log.d(TAG, tagName + count);
                            count++;

                            if(tagName.compareTo("trkpt")==0) {
                                lat = Double.parseDouble(parser.getAttributeValue(null, "lat"));
                                lon = Double.parseDouble(parser.getAttributeValue(null, "lon"));
                            }
                            else if(tagName.compareTo("ele")==0) {
                                alt = Double.parseDouble(parser.nextText());
                            }

                            String locationName = lat + ":" + lon + ":" + alt;
                            Location location = new Location(locationName);
                            location.setLatitude(lat);
                            location.setLongitude(lon);
                            location.setAltitude(alt);
                            mLocationGpxList.add(location);

                            break;

                        default:
                            break;
                    }

                    parser.next();
                }
            }
            catch (XmlPullParserException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

Però non si ferma MAI. Quel log.d non viene mai stampato, come se non entrasse nel case. Se però lo metto appena dopo il
while stampa all'infinito! Non riesco a capire perché  :-(

Post unito: 19 Dicembre 2013, 14:10:58 CET
parser.next(); deve essere eventType = parser.next()

Quanto sono idiota.. ora provo.

Post unito: 19 Dicembre 2013, 14:19:32 CET
Ok funziona ed è velocissimo. Solo che per come ho scritto il tutto ho due problemi:

1) Mi crea delle locazioni in più vuote
2) Se ruoto il dispositivo il parsing si ferma

Post unito: 19 Dicembre 2013, 14:27:35 CET
Codice: [Seleziona]
protected Void doInBackground(File... files) {

            try {

                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
                XmlPullParser parser = factory.newPullParser();
                parser.setInput(new FileInputStream(files[0]),null);

                double lat = 0;
                double lon = 0;
                double alt = 0;

                int eventType = parser.getEventType();

                while(eventType != XmlPullParser.END_DOCUMENT) {

                    if(eventType == XmlPullParser.START_TAG) {

                        String tagName = parser.getName();

                        if(tagName.compareTo("trkpt")==0) {
                            lat = Double.parseDouble(parser.getAttributeValue(null, "lat"));
                            lon = Double.parseDouble(parser.getAttributeValue(null, "lon"));
                            count++;
                        }

                        else if(tagName.compareTo("ele")==0) {
                                alt = Double.parseDouble(parser.nextText());
                        }
                    }

                    if(eventType == XmlPullParser.END_TAG) {

                        String tagName = parser.getName();

                        if(tagName.compareTo("trkpt")==0) {
                            String locationName = lat + ":" + lon + ":" + alt;
                            Location location = new Location(locationName);
                            location.setLatitude(lat);
                            location.setLongitude(lon);
                            location.setAltitude(alt);
                            Log.d(TAG, location.toString());
                            mLocationGpxList.add(location);
                        }
                    }

                    eventType = parser.next();
                }
            }
            catch (XmlPullParserException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

A qualcuno potrebbe servire, è molto efficiente!
« Ultima modifica: 19 Dicembre 2013, 14:49:17 CET da Elmvor »