Как разобрать список XML-данных из URL в Spinner Android Studio - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу проанализировать XML-данные в счетчике, я уже создаю метод получения и установки для данных, вот XML-данные, которые я получаю по URL,

<response>
<result>
    <foods>
        <food>
            <id>01</id>
            <name>Pizza</name>
            <price>20</price>
        </food>
    </foods>
</result>
</response>

, как анализировать список XML-данных вSpinner?

1 Ответ

0 голосов
/ 02 декабря 2018

Прежде всего, создайте класс POJO для еды:

   public class Food {
     public String id, name, price;
   }


  private void parseXML(String urlResponse) {
        XmlPullParserFactory parserFactory;
        try {
            parserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = parserFactory.newPullParser();
            InputStream is = new ByteArrayInputStream(urlResponse.getBytes());
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(is, null);

            processParsing(parser);

        } catch (XmlPullParserException e) {

        } catch (IOException e) {
        }
    }


    private void processParsing(XmlPullParser parser) throws IOException, XmlPullParserException{
        ArrayList<Food> foods = new ArrayList<>();
        int eventType = parser.getEventType();
        Food currentFood = null;

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String eltName = null;

            switch (eventType) {
                case XmlPullParser.START_TAG:
                    eltName = parser.getName();

                    if ("food".equals(eltName)) {
                        currentFood = new Food();
                        foods.add(currentFood);
                    } else if (currentFood != null) {
                        if ("name".equals(eltName)) {
                            currentFood.name = parser.nextText();
                        } else if ("id".equals(eltName)) {
                            currentFood.id = parser.nextText();
                        } else if ("price".equals(eltName)) {
                            currentFood.price = parser.nextText();
                        }
                    }
                    break;
            }

            eventType = parser.next();
        }

        printFoods(foods);
    }
...