Исключение синтаксического анализа: В строке 1, столбец 0: никакой элемент не найден

У меня есть странная проблема. Я получаю следующую ошибку, которая вызывает завершение силы:

org.apache.harmony.xml. ExpatParser$ParseException: В строке 1, столбец 0: никакой элемент не найден в org.apache.harmony.xml. ExpatParser.parseFragment(ExpatParser.java:508) в org.apache.harmony.xml. ExpatParser.parseDocument(ExpatParser.java:467) в org.apache.harmony.xml. ExpatReader.parse(ExpatReader.java:329) в org.apache.harmony.xml. ExpatReader.parse(ExpatReader.java:286)

После нажатия кнопки Force Close воссоздается Действие, и парсинг завершается без помехи. Я использую следующий фрагмент кода внутри doInBackground AsyncTask:

URL serverAddress = new URL(url[0]);

HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setReadTimeout(10000);
connection.connect();

InputStream stream = connection.getInputStream();

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();

XMLReader xr = sp.getXMLReader();

xr.parse(new InputSource(stream));  // The line that throws the exception

Почему был бы завершение силы Действия и затем выполнение без каких-либо проблем сразу после? BufferedInputStream несколько отличался бы? Я экранирован.:(

Спасибо за внимание все.

Обновление: оказывается, что HttpURLConnection.getResponseCode () возвращается-1 время от времени, таким образом, InputStream, вероятно, правильно не устанавливается.

5
задан jeffh 27 April 2010 в 11:29
поделиться

4 ответа

HTTPURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);

Эти строки немного странные. Это HTTPURLConnection или HttpURLConnection ? Метод запроса по умолчанию уже GET . Однако setDoOutput (true) принудительно это в POST .

Я бы заменил все эти строки на

URLConnection connection = serverAddress.openConnection();

и повторил попытку. Может случиться так, что он вернул ошибку, потому что вы принудительно отправили POST и ничего не записали в вывод (тело запроса). connection.connect () , кстати, уже неявно вызывается connection.getInputStream () , так что эта строка тоже лишняя.

Обновление : работает ли следующее в целях тестирования?

BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
for (String line; (line = reader.readLine()) != null;) {
    System.out.println(line);
}
reader.close();
6
ответ дан 13 December 2019 в 19:23
поделиться

Не знаю, исправили ли вы это, но у меня была та же проблема. Это было странно, в эмуляторе все работало нормально, но на телефоне всегда выдавала ошибку xr.parse () . Даже когда я напечатал InputStream , он дал бы мне допустимый вывод xml-документа. Похоже, проблема заключалась в создании объекта InputSource

Вот как я это исправил: вместо использования InputStream для создания вашего InputSource я только что создал источник ввода напрямую из строки url.

InputSource a =  new InputSource(url_string);   

где url_string - это просто строка с вашим URL. Не спрашивайте меня, почему это работает ... Мне это не очень нравится, потому что нет способа проверить тайм-ауты и тому подобное.Но это работает, дайте мне знать, как это происходит!

2
ответ дан 13 December 2019 в 19:23
поделиться

На родственной примечания к дизайну, загрузка содержимого URL-адреса никогда не должна принудительно закрывать действие - я рекомендую поместить все это в реализацию AsyncTask и сообщить или повторить попытку после того, как вы вернетесь в поток графического интерфейса.

1
ответ дан 13 December 2019 в 19:23
поделиться

Согласно InputStream javadoc метод будет блокироваться до тех пор, пока данные не станут доступными или не будет обнаружен EOF. Итак, другая сторона Socket должна закрыть его - тогда вызов inStream.read () вернется.

Если вы используете BufferedReader , вы можете читать построчно. Метод readLine () вернется, как только будет прочитана строка из HTTP-ответа.

1
ответ дан 13 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: