问题描述
packagegoogleweather;importjava.io.ByteArrayOutputStream;importjava.io.DataInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjavax.microedition.io.Connector;importjavax.microedition.io.HttpConnection;importjavax.microedition.lcdui.CustomItem;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Form;importjavax.microedition.lcdui.Graphics;importjavax.microedition.lcdui.Image;importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;importorg.kxml2.io.KXmlParser;importorg.xmlpull.v1.XmlPullParserException;publicclassGoogleWeatherextendsMIDlet{InputStreamis;Displaydis;Formf;intwidth;Stringcity;Stringforecast_date;publicGoogleWeather(){dis=Display.getDisplay(this);}protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{//TODOAuto-generatedmethodstub}protectedvoidpauseApp(){//TODOAuto-generatedmethodstub}protectedvoidstartApp()throwsMIDletStateChangeException{f=newForm("青岛天气预报");width=f.getWidth();dis.setCurrent(f);getIS();if(is==null)f.append("is==null");parse();}publicbooleangetIS(){Stringurl="http://www.google.com/ig/api?weather=Qingdao";HttpConnectionhcon=null;booleanret=false;try{hcon=(HttpConnection)Connector.open(url);StringcontentType=hcon.getHeaderField("Content-Type");//这里用来过滤移动资费页面if(contentType!=null&&contentType.indexOf("text/vnd.wap.wml")!=-1){hcon=null;hcon=(HttpConnection)Connector.open(url);}is=newDataInputStream(hcon.openInputStream());ret=true;}catch(Exceptione){ret=false;e.printStackTrace();}returnret;}publicbooleanparse(){KXmlParserparser;parser=newKXmlParser();booleanret=false;try{parser.setInput(newInputStreamReader(is));xml_api_reply(parser);}catch(Exceptione){e.printStackTrace();}try{is.close();}catch(IOExceptione){e.printStackTrace();}returnret;}privatevoidxml_api_reply(KXmlParserparser){try{parser.nextTag();parser.require(KXmlParser.START_TAG,null,"xml_api_reply");parser.nextTag();parser.require(KXmlParser.START_TAG,null,"weather");parser.nextTag();forecast_information(parser);parser.nextTag();current_conditions(parser);parser.nextTag();forecast_conditions(parser);parser.nextTag();forecast_conditions(parser);parser.nextTag();forecast_conditions(parser);parser.nextTag();forecast_conditions(parser);parser.nextTag();parser.require(KXmlParser.END_TAG,null,"weather");parser.nextTag();parser.require(KXmlParser.END_TAG,null,"xml_api_reply");}catch(XmlPullParserExceptione){f.append("11");}catch(IOExceptione){f.append("12");}}privatevoidcurrent_conditions(KXmlParserparser)throwsXmlPullParserException,IOException{Stringcondition,temp_f,temp_c,humidity,icon,wind_condition;parser.require(KXmlParser.START_TAG,null,"current_conditions");parser.nextTag();parser.require(KXmlParser.START_TAG,null,"condition");condition=parser.getAttributeValue(0);parser.nextTag();parser.require(KXmlParser.END_TAG,null,"condition");parser.nextTag();parser.require(KXmlParser.START_TAG,null,"temp_f");temp_f=parser.getAttributeValue(0);parser.nextTag();parser.require(KXmlParser.END_TAG,null,"temp_f");parser.nextTag();parser.require(KXmlParser.START_TAG,null,"temp_c");temp_c=parser.getAttributeValue(0);parser.nextTag();parser.require(KXmlParser.END_TAG,null,"temp_c");parser.nextTag();parser.require(KXmlParser.START_TAG,null,"humidity");humidity=parser.getAttributeValue(0);parser.nextTag();parser.require(KXmlParser.END_TAG,null,"humidity");parser.nextTag();parser.require(KXmlParser.START_TAG,null,"icon");icon=parser.getAttributeValue(0);parser.nextTag();parser.require(KXmlParser.END_TAG,null,"icon");parser.nextTag();parser.require(KXmlParser.START_TAG,null,"wind_condition");wind_condition=parser.getAttributeValue(0);parser.nextTag();parser.require(KXmlParser.END_TAG,null,"wind_condition");parser.nextTag();System.out.println(condition);System.out.println(temp_f);System.out.println(temp_c);System.out.println(humidity);System.out.println(icon);System.out.println(wind_condition);icon="http://www.google.com"+icon;CurrentWeatherItemcwi=newCurrentWeatherItem(temp_c,city,forecast_date,loadHttpFile(icon));f.append(cwi);parser.require(KXmlParser.END_TAG,null,"current_conditions");}