Java 如何在android中解析yahoo weather xml

Java 如何在android中解析yahoo weather xml,java,android,Java,Android,我是android新手,我想开发一个示例应用程序,在我的android应用程序中显示天气,我正在使用url“”,在我的应用程序中,所有字段的输出都返回null。我无法解析url。请帮助我。这是我正在使用的代码: import java.net.URL; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.x

我是android新手,我想开发一个示例应用程序,在我的android应用程序中显示天气,我正在使用url“”,在我的应用程序中,所有字段的输出都返回null。我无法解析url。请帮助我。这是我正在使用的代码:

import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.LinearLayout;
import android.widget.TextView;

public class YahooWeatherMainActivity extends Activity {

    String url = "http://weather.yahooapis.com/forecastrss?w=2295425&u=c&#8221";

    SetterGetter setterGetter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_yahoo_weather_main);
        abc();

    }

    public void abc() {
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(1);

        TextView today_date;
        TextView city;
        TextView region;
        TextView country;
        TextView temp;
        TextView humidity;
        TextView wind;
        TextView sunnise;
        TextView sunset;
        TextView date[];
        TextView day[];
        TextView low[];
        TextView high[];
        TextView text[];

        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader xr = sp.getXMLReader();
            URL sourceUrl = new URL(url);
            MyXMLHandler myXMLHandler = new MyXMLHandler();
            xr.setContentHandler(myXMLHandler);
            xr.parse(new InputSource(sourceUrl.openStream()));

        } catch (Exception e) {
            System.out.println("XML Pasing Excpetion = " + e);
        }

        setterGetter = MyXMLHandler.setterGetter;

        today_date = new TextView(this);
        today_date.setText("Today_Date = " + setterGetter.getToday_date());

        city = new TextView(this);
        city.setText("City = " + setterGetter.getCity());
        region = new TextView(this);
        region.setText("region = " + setterGetter.getRegion());

        country = new TextView(this);
        country.setText("Date = " + setterGetter.getCountry());

        temp = new TextView(this);
        temp.setText("temp = " + setterGetter.getTemp());

        humidity = new TextView(this);
        humidity.setText("humidity = " + setterGetter.getHumidity());

        wind = new TextView(this);
        wind.setText("wind = " + setterGetter.getWind());

        sunnise = new TextView(this);
        sunnise.setText("sunnise = " + setterGetter.getSunnise());

        sunset = new TextView(this);
        sunset.setText("Sunset = " + setterGetter.getSunset());

        date = new TextView[setterGetter.getDate().size()];
        day = new TextView[setterGetter.getDate().size()];
        low = new TextView[setterGetter.getDate().size()];
        high = new TextView[setterGetter.getDate().size()];
        text = new TextView[setterGetter.getDate().size()];
        layout.addView(today_date);
        layout.addView(city);
        layout.addView(region);
        layout.addView(country);
        layout.addView(temp);
        layout.addView(humidity);
        layout.addView(wind);
        layout.addView(sunnise);
        layout.addView(sunset);

        for (int i = 0; i < setterGetter.getDate().size(); i++) {
            date[i] = new TextView(this);
            date[i].setText("Date = " + setterGetter.getDate().get(i));
            day[i] = new TextView(this);
            day[i].setText("Day = " + setterGetter.getDay().get(i));
            low[i] = new TextView(this);
            low[i].setText("low = " + setterGetter.getLow().get(i));
            high[i] = new TextView(this);
            high[i].setText("high = " + setterGetter.getHigh().get(i));
            text[i] = new TextView(this);
            text[i].setText("Condition = " + setterGetter.getText().get(i));
            layout.addView(date[i]);
            layout.addView(day[i]);
            layout.addView(low[i]);
            layout.addView(high[i]);
            layout.addView(text[i]);

        }
        setContentView(layout);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.yahoo_weather_main, menu);
        return true;
    }

}





import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyXMLHandler extends DefaultHandler {

    Boolean currentElement = false;
    String currentValue = null;

    public static SetterGetter setterGetter = null;

    public static SetterGetter getList() {
        return setterGetter;
    }

    public static void setSitesList(SetterGetter sitesList) {
        MyXMLHandler.setterGetter = setterGetter;
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if (currentElement) {
            currentValue = new String(ch, start, length);
            currentElement = false;
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        currentElement = false;

        if (localName.equalsIgnoreCase("lastBuildDate"))
            setterGetter.setToday_date(currentValue);

    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        currentElement = true;
        if (localName.equals("rss")) {
            setterGetter = new SetterGetter();
        } else if (localName.equals("channel")) {
            String date = attributes.getValue("date");
            setterGetter.setDate(date);
            String day = attributes.getValue("day");
            setterGetter.setDay(day);

            String low = attributes.getValue("low");
            setterGetter.setLow(low);

            String high = attributes.getValue("high");
            setterGetter.setHigh(high);

            String text = attributes.getValue("text");
            setterGetter.setText(text);

        } else if (localName.equals("yweather:location")) {
            String city = attributes.getValue("city");
            setterGetter.setCity(city);

            String region = attributes.getValue("region");
            setterGetter.setRegion(region);

            String country = attributes.getValue("country");
            setterGetter.setCountry(country);

        }

        else if (localName.equals("yweather:wind")) {
            String chill = attributes.getValue("chill");
            setterGetter.setTemp(chill);
            String speed = attributes.getValue("speed");
            setterGetter.setWind(speed);
        } else if (localName.equals("yweather:atmosphere")) {
            String humidity = attributes.getValue("humidity");
            setterGetter.setHumidity(humidity);
        } else if (localName.equals("yweather:astronomy")) {
            String sunrise = attributes.getValue("sunrise");
            setterGetter.setSunnise(sunrise);

            String sunset = attributes.getValue("sunset");
            setterGetter.setSunset(sunset);

        }
    }

}
import java.net.URL;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.SAXParserFactory;
导入org.xml.sax.InputSource;
导入org.xml.sax.XMLReader;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
导入android.widget.LinearLayout;
导入android.widget.TextView;
公共类YahooWeatherMain活动扩展活动{
字符串url=”http://weather.yahooapis.com/forecastrss?w=2295425&u=c”";
settergeter settergeter=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u yahoo\u weather\u main);
abc();
}
公共图书馆{
LinearLayout布局=新的LinearLayout(本);
布局。设置方向(1);
text查看今天的日期;
文本视图城市;
文本视图区域;
TextView国家/地区;
文本视图温度;
文本视图湿度;
文本视图风;
TextView-sunnise;
文本视图日落;
文本查看日期[];
TextView日[];
TextView低[];
TextView高[];
text查看文本[];
试一试{
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
URL sourceUrl=新URL(URL);
MyXMLHandler MyXMLHandler=新的MyXMLHandler();
xr.setContentHandler(myXMLHandler);
parse(新的InputSource(sourceUrl.openStream());
}捕获(例外e){
System.out.println(“XML-Pasing expetion=“+e”);
}
settergeter=MyXMLHandler.settergeter;
今天\日期=新文本视图(此);
today_date.setText(“today_date=“+setterGetter.getToday_date());
城市=新文本视图(此);
city.setText(“city=“+settargeter.getCity());
区域=新文本视图(此);
region.setText(“region=“+settargeter.getRegion());
国家/地区=新文本视图(此);
country.setText(“Date=“+settergeter.getCountry());
temp=新文本视图(此);
temp.setText(“temp=“+settargeter.getTemp());
湿度=新文本视图(此);
湿度.setText(“湿度=“+settargeter.get湿度());
wind=新文本视图(此);
wind.setText(“wind=“+settargeter.getWind());
sunnise=新文本视图(此);
sunnise.setText(“sunnise=“+settargeter.getSunnise());
日落=新文本视图(此);
sunset.setText(“sunset=“+settargeter.getSunset());
日期=新文本视图[SetTargeter.getDate().size()];
day=新文本视图[SetTargeter.getDate().size()];
低=新文本视图[SetTargeter.getDate().size()];
high=新文本视图[SetTargeter.getDate().size()];
text=新的文本视图[setterGetter.getDate().size()];
layout.addView(今日\日);
布局。addView(城市);
布局。添加视图(区域);
布局。添加视图(国家/地区);
布局。添加视图(临时);
布局。添加视图(湿度);
布局。添加视图(风);
布局。添加视图(sunnise);
布局。添加视图(日落);
对于(int i=0;i