La classe Defaulthandler dans Android ne lit pas entière String de XML
Question
J'étends Defaulthandler pour analyser un XML. J'analyse cette page:http://maps.googleapis.com/maps/api/directions/xml?origin=staten%20island&destination=florida&sensor=false
Je reçois tous les points de polyligne>. Tout fonctionne bien, sauf pour une chaîne spécifique. Je dépasse la méthode des personnages dans Defaulthandler comme ceci:
public void characters(char[] ch, int start, int length) throws SAXException {
if (currentElement) {
Log.v("Length", length+"");
currentValue = new String(ch, start, length);
currentElement = false;
}
}
La longueur renvoie 282 lorsque la chaîne mesure 660 caractères. C'est la chaîne:
qhitfxpifmn @ t @ vaCdM
Wnnbjeeti | plixnxhhmjldq | dalwa~CxfEfOxRlK
O ~ pduvoltnhdjbyl fvlwq@~p@~gA
gafkzkbpRpa@bi@|wAnuBjZ|c@rD~F
Jjp | i | qzr @~AbKpS
J ~ ovgdknphubmpn ~ {@ ~ {@ tlhmlzfzni ~ ilh @ nh @ nnO~GbJjEpGpErHbIfPpDxIvDpKzRvp@rE|MrF|MhKpRbF
Ir_ @ jo @LtS~MzYp[bw@hEvJ|F
Lblvqzhrjfv @ fz @ nuxxhAtoAlGzIl
Abwavmfrx_anmalr @ z} @jqttfjxjv] h] budfqdjfrgbi ~ k | e ~ hpfnklfflzb | fjelmhcvi | tw@vDnPzChPx@vFdBhOrh@xlFbNptAvAdMnB
Mnejt ~ evqhfO~F
Njcjfhethlebhbk @ bx @ fwb ^ nsvxnsryxgpkjdvgndxhnhdr ~ _a | gcdnz] tetmfs @ zlbbhhinhinhp\hJ|PbIvOxB|E|m@plA~LpUzs@dwAvj@hfA|D|IrDrJzlAriDhFfR~Uv~@h
@j | afy @{DtFzX|BtOpArLvSjcCv@dNJjEGbFDdDVnElAnIx@xDnC~JbApFb@fDbKb~@
Dj ^ hbvn | bbo | dl
Et c'est ce que Defaulthandler retourne:
qhitfxpifmn @ t @ vaCdM
Wnnbjeeti | plixnxhhmjldq | dalwa~CxfEfOxRlK
O ~ pduvoltnhdjbyl fvlwq@~p@~gA
gafkzkbpRpa@bi@|wAnuBjZ|c@rD~F
Jjp | i | qzr @~AbKpS
J ~ ovgdknphubmpn ~ {@ ~ {@ tlhmlzfzni ~ ilh @ nh @ nnO~GbJjEpGpErHbIfPpDxIvDpKzRvp@rE|MrF|MhKpRbF
Ir_ @ jo @LtS~MzYp[bw@hEvJ|F
Lblvqzhrjfv @ fz @ nuxxh`ato
Cela s'arrête au personnage 282 et je ne sais pas pourquoi.
La solution
À partir de la documentation du Contenu Interface, qui est implémentée par Defaulthandler:
Les analyseurs de sax peuvent renvoyer toutes les données de caractère contigu en un seul morceau, ou ils peuvent les diviser en plusieurs morceaux
Vous devez agréger les données de plusieurs appels à cette méthode dans un stringbuilder, puis gérer ces données dans l'appel d'endettement.