Фон
Я разрабатываю простое приложение для прогнозирования погоды, предназначенное для отображения погоды для шести разных мест. Я использую Java и Android Studio для разработки этого проекта. Приложение использует URL-адреса с веб-сайта погоды BB C, каждый из которых представляет собой файл XML.
Здесь - это ссылка на один из файлов XML, которые я пытаюсь проанализировать. , все они практически идентичны по XML. Я использовал несколько XML валидаторов, чтобы убедиться, что они действительны.
Проблема
При запуске приложение работает нормально. Однако в Logcat появляется ошибка:
org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT null@1:5 in java.io.StringReader@4acac2b)
W/System.err: at com.android.org.kxml2.io.KXmlParser.next(KXmlParser.java:432)
W/System.err: at com.android.org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
W/System.err: at DAC.GCU.mpd_resit_davidcavana.MainActivity$Task.run(MainActivity.java:249)
W/System.err: at java.lang.Thread.run(Thread.java:923)
Код
Вот код, в котором я читаю файл XML и пытаюсь его разобрать.
URL aurl;
URLConnection yc;
BufferedReader in = null;
String inputLine = "";
try {
Log.e("MyTag", "in try");
aurl = new URL(url);
yc = aurl.openConnection();
in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
while ((inputLine = in.readLine()) != null) {
result = result + inputLine;
result = result.replaceAll("[^\\x20-\\x7e]", "");
Log.e("MyTag", inputLine);
}
in.close();
} catch (IOException ae) {
Log.e("MyTag", "ioexception");
}
XmlPullParserFactory factory = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
} catch (XmlPullParserException e) {
e.printStackTrace();
}
XmlPullParser xpp = null;
try {
xpp = factory.newPullParser();
xpp.setInput(new StringReader(result));
int eventType = xpp.getEventType();
while (eventType != xpp.END_DOCUMENT) {
if (eventType == xpp.START_DOCUMENT) {
System.out.println("Start Document");
} else if (eventType == xpp.START_TAG) {
System.out.println("Start Tag: " + xpp.getName());
} else if (eventType == XmlPullParser.END_TAG) {
System.out.println("End tag " + xpp.getName());
} else if (eventType == XmlPullParser.TEXT) {
System.out.println("Text " + xpp.getText());
}
eventType = xpp.next();
}
System.out.println("End Document");
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
Примечание
Переменная result работает должным образом - она содержит весь файл XML в виде строки. Эту переменную можно отправить в представление TextView, а необработанные данные XML можно увидеть в самом приложении.
Я также попытался изменить строку
in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
* От 1029 * до
in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8"));
, и это по-прежнему дает ту же ошибку.
Любая помощь будет принята с благодарностью.