Ich habe einen Code, der eine KML-Datei mit XMLserializer
erstellt. Es funktioniert gut, die verschiedenen Polygone zu erstellen, aber ich habe einen Fehler beim Schließen der XML, die ich wirklich nicht verstehe.ArrayIndexOutOfBoundsException xmlserializer
02-09 10:03:02.919 24712-26301/com.example.accgps W/System.err: java.lang.ArrayIndexOutOfBoundsException: length=24; index=-3
02-09 10:03:02.919 24712-26301/com.example.accgps W/System.err: at org.kxml2.io.KXmlSerializer.endTag(KXmlSerializer.java:493)
02-09 10:03:02.919 24712-26301/com.example.accgps W/System.err: at com.example.accgps.KMLHelper.SerialEnd(KMLHelper.java:150)
02-09 10:03:02.919 24712-26301/com.example.accgps W/System.err: at com.example.accgps.RefreshKML$1.run(RefreshKML.java:283)
02-09 10:03:02.919 24712-26301/com.example.accgps W/System.err: at java.lang.Thread.run(Thread.java:818)*
Der Aufruf der SerialEnd()
wird nach dem Erstellen der Polygone, durchgeführt, die gut funktionieren, so dass ich weiß nicht, warum es außerhalb der Grenzen ist:
for (s = 0; s < PolyArray.size(); s++) {
polygon = PolyArray.get(s);
kH.SerialPlacePol("Tramo " + i, polygon);
i++;
}
Log.i(TAG, "RefreshKML: se han creado " + (i - 1) + " tramos");
editor.putInt("poligonos", i);
editor.apply();
} else {
Toast.makeText(getApplicationContext(),"No existen datos suficientes para "+
"generar el archivo KML",Toast.LENGTH_SHORT).show();
}
} else {
Log.d(TAG, "RefreshKML: No hay datos de GPS suficientes");
}
if (end) { //Solo cierra el archivo si se termina la recopilación de datos
kH.SerialEnd();
end = false; //En caso de que no se completó esta opción
copyAllFiles();
}
Der Fehler in dem ersten provoziert Linie der SerialEnd()
Methode:
public void SerialEnd() {
try{
serializer.endTag(null,"Document"); //THIS IS THE LINE WITH THE ERROR
serializer.endTag(null,"kml");
//serializer.endDocument();
//serializer.flush();
fileos.close();
Log.d(TAG,"KMLHelper: SerialEnd cierra archivo KML");
}catch(Exception e){
Log.d(TAG,"KMLHelper: Exception occured in SerialEnd");
e.printStackTrace();
}
}
ich habe versucht, eine Antwort auf Fragen zu finden, aber ich habe nicht die richtige Lösung finden, vielleicht der Serializer ist geschlossen, aber ich habe nicht getan, noch
Dies ist, wie ich die XMLserializer
im Fall erstellen Sie ein Problem hier sehen:
public KMLHelper(File file) {
try{
serializer.endTag(null, "Document");
serializer.endTag(null, "kml");
serializer.endDocument();
serializer.flush();
Log.d(TAG,"KMLHelper: SerialEnd cierra archivo KML");
}catch(Exception e){
Log.d(TAG,"KMLHelper: Exception occurred in SerialEnd");
e.printStackTrace();
}finally {
try {fileos.close();} catch (IOException io) {io.printStackTrace();}
}
}
Edit: Ich habe einige Änderungen in den SerialEnd()
gemacht Legen Sie den Abschluss der Datei in die finally- und unkommentierte EndDocument-Methode. Ich habe auch den Zugriff auf den Thread, der die XML-Datei erstellt, mit einer Synchronisierung auf die Erstellung der Absicht gesteuert, die die Erstellung der XML-Datei mit allen Polygonen steuert.