Я проанализировал XML-канал, но в одном из тегов хочу продолжить анализ данных, но не знаю, как это сделать? Я использую XMLPullParser для этого в пакете, затем информация сохраняется в пакете Widgetclass перед отправкой в мою основную активность через inent с использованием широковещательного приемника.
в настоящее время код вызывает только одно поле проанализированной информации, но вызов большего количества представляет проблему несортированного содержимого тега XML. Кажется, я не могу заставить метод split.String работать здесь, должен ли он быть в классе виджета, в котором я должен хранить информацию, или в основной деятельности?
//парсер public static WidgetClass[] parseFeed(String content) {
try {
boolean inItemTag = false;
String currentTagName = "";
WidgetClass currentItem = null;
List<WidgetClass> itemList = new ArrayList<>();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader(content));
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
currentTagName = parser.getName();
if (currentTagName.equals("item")) {
inItemTag = true;
currentItem = new WidgetClass();
itemList.add(currentItem);
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("item")) {
inItemTag = false;
}
currentTagName = "";
break;
case XmlPullParser.TEXT:
String text = parser.getText();
if (inItemTag && currentItem != null) {
try {
switch (currentTagName) {
case "title":
currentItem.setTitle(text);
break;
case "description":
currentItem.setDescription(text);
break;
case "link":
currentItem.setLink(text);
break;
case "pubDate":
currentItem.setPubDate(text);
break;
case "category":
currentItem.setCatagory(text);
break;
case "geo:lat":
currentItem.setGeoLat(Double.parseDouble(text));
case "geo:long":
currentItem.setGeoLong(Double.parseDouble(text));
default:
break;
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
break;
}
eventType = parser.next();
} // end while loop
WidgetClass[] widgetClasses = new WidgetClass[itemList.size()];
return itemList.toArray(widgetClasses);
} catch (Exception e) {
e.printStackTrace();
return null;
}
В идеале я хотел бы еще больше разделить поток из тега, а затем поместить их в массив, чтобы перейти к моему визуальному слою.