Пример #1
0
  private WeatherInfo parseWeatherInfo(Context context, Document doc, WOEIDInfo woeidInfo) {
    WeatherInfo weatherInfo = new WeatherInfo();
    try {

      Node titleNode = doc.getElementsByTagName("title").item(0);

      if (titleNode.getTextContent().equals(YAHOO_WEATHER_ERROR)) {
        return null;
      }

      weatherInfo.setTitle(titleNode.getTextContent());
      weatherInfo.setDescription(doc.getElementsByTagName("description").item(0).getTextContent());
      weatherInfo.setLanguage(doc.getElementsByTagName("language").item(0).getTextContent());
      weatherInfo.setLastBuildDate(
          doc.getElementsByTagName("lastBuildDate").item(0).getTextContent());

      Node locationNode = doc.getElementsByTagName("yweather:location").item(0);
      weatherInfo.setLocationCity(locationNode.getAttributes().getNamedItem("city").getNodeValue());
      weatherInfo.setLocationRegion(
          locationNode.getAttributes().getNamedItem("region").getNodeValue());
      weatherInfo.setLocationCountry(
          locationNode.getAttributes().getNamedItem("country").getNodeValue());

      Node windNode = doc.getElementsByTagName("yweather:wind").item(0);
      weatherInfo.setWindChill(windNode.getAttributes().getNamedItem("chill").getNodeValue());
      weatherInfo.setWindDirection(
          windNode.getAttributes().getNamedItem("direction").getNodeValue());
      weatherInfo.setWindSpeed(windNode.getAttributes().getNamedItem("speed").getNodeValue());

      Node atmosphereNode = doc.getElementsByTagName("yweather:atmosphere").item(0);
      weatherInfo.setAtmosphereHumidity(
          atmosphereNode.getAttributes().getNamedItem("humidity").getNodeValue());
      weatherInfo.setAtmosphereVisibility(
          atmosphereNode.getAttributes().getNamedItem("visibility").getNodeValue());
      weatherInfo.setAtmospherePressure(
          atmosphereNode.getAttributes().getNamedItem("pressure").getNodeValue());
      weatherInfo.setAtmosphereRising(
          atmosphereNode.getAttributes().getNamedItem("rising").getNodeValue());

      Node astronomyNode = doc.getElementsByTagName("yweather:astronomy").item(0);
      weatherInfo.setAstronomySunrise(
          astronomyNode.getAttributes().getNamedItem("sunrise").getNodeValue());
      weatherInfo.setAstronomySunset(
          astronomyNode.getAttributes().getNamedItem("sunset").getNodeValue());

      weatherInfo.setConditionTitle(doc.getElementsByTagName("title").item(2).getTextContent());
      weatherInfo.setConditionLat(doc.getElementsByTagName("geo:lat").item(0).getTextContent());
      weatherInfo.setConditionLon(doc.getElementsByTagName("geo:long").item(0).getTextContent());

      Node currentConditionNode = doc.getElementsByTagName("yweather:condition").item(0);
      weatherInfo.setCurrentCode(
          Integer.parseInt(
              currentConditionNode.getAttributes().getNamedItem("code").getNodeValue()));
      weatherInfo.setCurrentText(
          currentConditionNode.getAttributes().getNamedItem("text").getNodeValue());
      weatherInfo.setCurrentTempF(
          Integer.parseInt(
              currentConditionNode.getAttributes().getNamedItem("temp").getNodeValue()));
      weatherInfo.setCurrentConditionDate(
          currentConditionNode.getAttributes().getNamedItem("date").getNodeValue());

      if (mNeedDownloadIcons) {
        weatherInfo.setCurrentConditionIcon(
            ImageUtils.getBitmapFromWeb(weatherInfo.getCurrentConditionIconURL()));
      }

      for (int i = 0; i < FORECAST_INFO_MAX_SIZE; i++) {
        this.parseForecastInfo(weatherInfo.getForecastInfoList().get(i), doc, i);
      }

      /*
       * pass some woied info
       */
      weatherInfo.mWOEIDneighborhood = woeidInfo.mNeighborhood;
      weatherInfo.mWOEIDCounty = woeidInfo.mCounty;
      weatherInfo.mWOEIDState = woeidInfo.mState;
      weatherInfo.mWOEIDCountry = woeidInfo.mCountry;

    } catch (NullPointerException e) {
      YahooWeatherLog.printStack(e);
      if (mExceptionListener != null) mExceptionListener.onFailParsing(e);
      weatherInfo = null;
    }

    return weatherInfo;
  }