El analizador SAX de Android no recibe el texto completo de las tags entre

Creé mi propio DefaultHandler para analizar feeds rss y para la mayoría de los feeds está funcionando bien, sin embargo, para ESPN, está cortando parte de la url del artículo debido a la forma en que ESPN forma sus urls. Un ejemplo de una URL completa del artículo de ESPN ..

http://sports.espn.go.com/nba/news/story?id=5189101&campaign=rss&source=ESPNHeadlines 

El problema es que, por alguna razón, el método de los caracteres DefaultHandler solo está obteniendo esto de la etiqueta que contiene la url anterior.

 http://sports.espn.go.com/nba/news/story?id=5189101 

Como puede ver, está recortando todo de la url del código de escape y después. ¿Cómo puedo hacer que el analizador SAX no corte mi cuerda en este código de escape? Por ref. aquí está el método de mis personajes …

  public void characters(char ch[], int start, int length) { String chars = (new String(ch).substring(start, start + length)); try { // If not in item, then title/link refers to feed if (!inItem) { if (inTitle) currentFeed.title = chars; } else { if (inLink) currentArticle.url = new URL(chars); if (inTitle) currentArticle.title = chars; if (inDescription) currentArticle.description = chars; if (inPubDate) currentArticle.pubDate = chars; if (inEnclosure) { } } } catch (MalformedURLException e) { Log.e("RSSReader", e.toString()); } } 

Rob W.

Como puede ver, está recortando todo de la url del código de escape y después.

De la documentación del método de characters() :

El analizador llamará a este método para informar cada fragmento de datos de caracteres. Los analizadores SAX pueden devolver todos los datos de caracteres contiguos en un solo fragmento, o pueden dividirlo en varios fragmentos; sin embargo, todos los personajes en un solo evento deben provenir de la misma entidad externa para que el Localizador brinde información útil.

Cuando escribo analizadores SAX, uso un StringBuilder para anexar todo lo que pasa a los characters() :

 public void characters (char ch[], int start, int length) { if (buf!=null) { for (int i=start; i 

Luego, en endElement() , tomo el contenido de StringBuilder y hago algo con él. De esa forma, si el analizador llama a characters() varias veces, no echo de menos nada.

 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub sb=new StringBuilder(); if(localName.equals("icon")) { iconflag=true; } } @Override public void characters (char ch[], int start, int length) { if (sb!=null && iconflag == true) { for (int i=start; i 

Así que lo descubrí, el código de arriba es la solución.