Комплекс парсинга XML с URL в Java - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь проанализировать данные о погоде в Android Studio по этой ссылке ...

http://metwdb-openaccess.ichec.ie/metno-wdb2ts/locationforecast?lat=54.7210798611;long=-8.7237392806

Я пытался использовать XmlPullParser, но я знаю, что я где-то ошибаюсь. Вот код на данный момент ...

public class WeatherParser extends AsyncTask {

    URL url;



   ArrayList<Weather> w = new ArrayList<>();




    @Override
    protected Object doInBackground(Object[] objects) {

        try {
            url = new URL("http://metwdb-openaccess.ichec.ie/metno-wdb2ts/locationforecast?lat=54.7210798611;long=-8.7237392806");

            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(false);
            XmlPullParser parser = factory.newPullParser();

            parser.setInput(url.openConnection().getInputStream(), "UTF_8");

            ArrayList<Weather> weatherArrayList = parseXML(parser);

            for(Weather weather: weatherArrayList ){

                w.add(weather);
            }   

        }catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return w;
    }

    private ArrayList<Weather> parseXML(XmlPullParser parser) throws XmlPullParserException, IOException{

        ArrayList<Weather> weathers = null;

        int eventType = parser.getEventType();
        Weather weather = null;

        while(eventType != XmlPullParser.END_DOCUMENT){
            String name;
            switch(eventType){
                case XmlPullParser.START_DOCUMENT:
                    weathers = new ArrayList<>();
                    break;
                case XmlPullParser.START_TAG:
                    name = parser.getName();
                    if(name.equals("time")){
                        weather = new Weather();
                        weather.time = parser.getAttributeValue(null, "from");
                    }
                    else if(weather != null){
                        if(name.equals("temperature")){
                            weather.temperature = parser.getAttributeValue(null, "value");
                        }
                        else if(name.equals("symbol")){
                            weather.weatherType = parser.getAttributeValue(null, "id");
                        }
                    }


            }

        }

        return weathers;
    }


    public InputStream getInputStream(URL url) {
        try {
            return url.openConnection().getInputStream();
        } catch (IOException e) {
            return null;
        }
    }

    public ArrayList<Weather> weathers()
    {
        return w;
    }
}

Является ли XMLParser правильным инструментом, или я должен заняться чем-то другим. Я попытался использовать DOMParser в Eclipse, и это сработало, но я не представляю, как его использовать в Android Studio.

...