📄 weatherreader.java
字号:
package com.j2medev.chapter4;
import java.io.*;
import java.util.Vector;
import javax.microedition.io.*;
import javax.microedition.lcdui.Form;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class WeatherReader implements Runnable{
//MIDlet实例,方便回调
private WeatherMIDlet midlet;
//请求的p,u参数
private String param;
public static final String host = "http://xml.weather.yahoo.com/forecastrss?";
public WeatherReader(WeatherMIDlet midlet,String param) {
this.midlet = midlet;
this.param = param;
}
public void run(){
HttpConnection conn = null;
try{
//等待界面
WaitingForm wait = new WaitingForm();
midlet.setCurrent(wait);
wait.update();
conn = (HttpConnection)Connector.open(host+param);
conn.setRequestMethod(HttpConnection.GET);
int responseCode = conn.getResponseCode();
wait.update();
if(responseCode != HttpConnection.HTTP_OK){
//简单起见,只要返回码不等于200则抛出异常
throw new IOException("Can't connect to server");
}
KXmlParser parser = new KXmlParser();
//设置KXmlParser的输入,注意编码格式为UTF-8
parser.setInput(new InputStreamReader(conn.openInputStream(),"UTF-8"));
wait.update();
int eventType = parser.getEventType();
Unit unit = new Unit();
Location location = new Location();
//存储
Vector v = new Vector();
while(eventType != XmlPullParser.END_DOCUMENT){
//根据事件类型解析XML数据
switch(eventType){
case XmlPullParser.START_TAG:{
String tag = parser.getName();
StringBuffer sb = new StringBuffer();
sb.append("<"+tag);
for(int i = 0;i<parser.getAttributeCount();i++){
sb.append(" "+parser.getAttributeName(i)+"=\""+parser.getAttributeValue(i)+"\"");
}
sb.append("/>");
if(tag.equals("yweather:location")){
for(int i = 0;i<parser.getAttributeCount();i++){
location.set(i,parser.getAttributeValue(i));
}
wait.update();
}else if(tag.equals("yweather:units")){
for(int i = 0;i<parser.getAttributeCount();i++){
unit.set(i,parser.getAttributeValue(i));
}
wait.update();
}else if(tag.equals("yweather:forecast")){
Forecast forecast = new Forecast();
forecast.setUnit(unit);
for(int i = 0;i<parser.getAttributeCount();i++){
forecast.set(i,parser.getAttributeValue(i));
}
v.addElement(forecast);
wait.update();
}
System.out.println(sb.toString());
break;
}
case XmlPullParser.START_DOCUMENT:{
System.out.println("Start Document");
break;
}case XmlPullParser.END_TAG:{
System.out.println("</"+parser.getName()+">");
break;
}case XmlPullParser.TEXT:{
System.out.println(parser.getText());
break;
}
default:
break;
}
eventType = parser.next();
}
System.out.println("End Doucment");
wait.update();
//显示结果
midlet.displayWeather(v,location);
}catch(IOException ex){
//出错提示信息
Form form = new Form("error");
form.append(ex.getMessage());
midlet.setCurrent(form);
}catch(XmlPullParserException e){
e.printStackTrace();
}finally{
//关闭连接
try{
if(conn != null)
conn.close();
}catch(IOException e){
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -