Как сделать чтобы при нажатии на кнопку на Activty производилось чтение из xml файла, создание массива объектов?

package Models;

import android.os.Build;

import androidx.annotation.RequiresApi;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

public class DOMExample {
    // Коллекция для хранения всех людей
    private static ArrayList<Errors> errors = new ArrayList<>();

    // Константы для элементов
    private static final String BackBrakePressureEmergency = "BackBrakePressureEmergency";
    private static final String CloggedSteeringFilters = "CloggedSteeringFilters";
    private static final String CloggedSteeringFiltersGS = "CloggedSteeringFiltersGS";
    private static final String EmergencyOil = "EmergencyOil";
    private static final String EmergencyOilLevelGS = "EmergencyOilLevelGS";
    private static final String FontBrakePressureEmergency = "FontBrakePressureEmergency";

    @RequiresApi(api = Build.VERSION_CODES.N)
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // Получение фабрики, чтобы после получить билдер документов.
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        // Получили из фабрики билдер, который парсит XML, создает структуру Document в виде иерархического дерева.
        DocumentBuilder builder = factory.newDocumentBuilder();

        // Запарсили XML, создав структуру Document. Теперь у нас есть доступ ко всем элементам, каким нам нужно.
        Document document = builder.parse(new File("resource/xml_file3.xml"));

        // Получение информации про каждый элемент отдельно
        collectInformation(document, BackBrakePressureEmergency);
        collectInformation(document, CloggedSteeringFilters);
        collectInformation(document, CloggedSteeringFiltersGS);
        collectInformation(document,EmergencyOil);
        collectInformation(document,EmergencyOilLevelGS);
        collectInformation(document,FontBrakePressureEmergency);

        // Вывод информации
        errors.forEach(System.out::println);
    }

    /**
     * Метод ищет информацию про теги по имени element и вносит всю информацию в коллекцию humans.
     * @param document Документ, в котором будем искать элементы.
     * @param element Имя элемента, теги которого нужно найти. Должна быть одна из констант, которые определяются выше.
     */
    private static void collectInformation(Document document, final String element) {
        // Получение всех элементов по имени тега.
        NodeList elements = document.getElementsByTagName(element);

        // Перебор всех найденных элементов
        for (int i = 0; i < elements.getLength(); i++) {
            // Получение всех атрибутов элемента
            NamedNodeMap attributes = elements.item(i).getAttributes();
            String startDate = attributes.getNamedItem("startDate").getNodeValue();
            String endDate = attributes.getNamedItem("endDate").getNodeValue();
            int duration =Integer.parseInt(attributes.getNamedItem("duration").getNodeValue());

            // В зависимости от типа элемента, нам нужно собрать свою дополнительну информацию про каждый подкласс, а после добавить нужные образцы в коллекцию.
            switch (element) {
                case BackBrakePressureEmergency: {
                    int turnover =Integer.parseInt(attributes.getNamedItem("turnover").getNodeValue());
                    errors.add(new BackBrakePressureEmergency(turnover,startDate,endDate,duration));
                } break;
                case CloggedSteeringFilters: {
                    errors.add(new CloggedSteeringFilters(startDate,endDate,duration));
                } break;
                case CloggedSteeringFiltersGS: {
                    errors.add(new CloggedSteeringFiltersGS(startDate,endDate,duration));
                } break;
                case EmergencyOil: {
                    int temp =Integer.parseInt(attributes.getNamedItem("temp").getNodeValue());
                    errors.add(new EmergencyOil(startDate,endDate,duration,temp));
                    break;
                }
                case EmergencyOilLevelGS: {
                    errors.add(new EmergencyOilLevelGS(startDate,endDate,duration));
                } break;
                case FontBrakePressureEmergency: {
                    int turnover =Integer.parseInt(attributes.getNamedItem("turnover").getNodeValue());
                    errors.add(new FontBrakePressureEmergency(turnover,startDate,endDate,duration));
                } break;
            }
        }
    }
}

Вот код для чтения и создания листа объектов из xml файла


Ответы (0 шт):