Как войти и разобрать InputStream в Android - PullRequest
1 голос
/ 19 сентября 2011

Я анализирую InputStream со следующим кодом, и он работает нормально.

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
XmlHandlerMatchDetails handler = new XmlHandlerDetails();
xr.setContentHandler(handler);
xr.parse(new InputSource(data));

Теперь мне нужно войти в InputStream, чтобы проверить его, я изменяю предыдущий код следующим образом:

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
XmlHandlerMatchDetails handler = new XmlHandlerDetails();
xr.setContentHandler(handler);
xr.parse(new InputSource(data));

BufferedReader br = new BufferedReader(new InputStreamReader(data)); 
StringBuilder sb = new StringBuilder(); 
String line; 
while ((line = br.readLine()) != null) {     
   sb.append(line); 
} 
String text = sb.toString();
Log.i(mTag, text);

Но у меня ошибка

09-19 12: 13: 02.982: ОШИБКА / MyClass (338): java.io.IOException: попытка чтения в закрытом потоке.

Какможно войти или преобразовать поток в строку, не закрывая ее?

РЕДАКТИРОВАТЬ - РЕШЕНО !!!

Я решаю это, анализируя строку вместо InputStream

xr.parse(new InputSource(new StringReader(text)));

1 Ответ

0 голосов
/ 19 сентября 2011

Я не уверен, что это проблема, но вы можете попробовать переписать цикл while к этому:

while( br.ready() )
  sb.append( br.readLine() );

Еще одна вещь, которая приходит мне в голову, это то, что InputStream, который вы используете (data), возможно, не сможет быть прочитан дважды - таким образом, анализ его с помощью XmlReader сначала вызывает его закрытие, а затем он не будет открыт, когда вы попробуйте разобрать его с помощью BufferedReader. Чтобы убедиться в этом, попробуйте запустить BufferedReader без предварительного анализа данных с помощью XmlReader.

...