第七部分 天氣預報
要實現乙個天氣預報的應用,首先需要找到乙個提供天氣資訊的web服務。
google提供的天氣預報,其獲取方式有兩種:
1、通過經緯度來定位獲得該地區的天氣資訊。
在瀏覽器中輸入
(30670000和104019996分別表示經度和緯度的資料),即可獲得乙個xml形式的
資料,其中包括了天氣資訊。通過網路獲得這些資訊後,再將這些xml資訊進行解析就可以得到我們需要的天氣資訊了
2、通過城市的名字來獲取天氣資訊
在瀏覽器中輸入
(chengdu代表城市的名字,此處為成都)
這兩種方式都獲得如下資訊
<?xml version="1.0"?>--
-//forecast_information表示當前的一些資訊,比如城市、時間等
-//current_conditions表示當前的實時天氣預報
-//如下四個forecast_conditions表示預報的後4天的天氣資訊--
-ui設計
通過上面找到資訊**後就需要根據資訊的內容來設計適合我們程式的介面。
分析上面資訊包括了最高 最低溫度、乙個icno圖示(表示天氣資訊的小圖示)、一些附加的描述。也就是說,我們至少需要乙個imageview來顯示這些圖示,乙個textview來顯示
溫度和附加訊息
public class singleweatherinfoview extends linearlayout
public singleweatherinfoview(context context, attributeset attrs)
public void setweatherstring(string aweatherstring)
public void setweathericon(url aurl)catch (exception e){}}}
res.layout.main.xml
<?xml version="1.0" encoding="utf-8"?>
" android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg">
public googleweatherhandler()
public weatherset getmyweatherset()
public void enddocument() throws saxexception
public void endelement(string uri, string localname, string name) throws saxexceptionelse if (localname.equals(forecast_conditions))
}public void startdocument() throws saxexception
public void startelement(string uri, string localname, string name, attributes attributes) throws saxexceptionelse if (localname.equals(forecast_conditions))else
string dataattribute = attributes.getvalue("data");
if (localname.equals("icon"))else if (this.is_forecast_conditions)
}else if (localname.equals("condition"))else if (this.is_forecast_conditions)
}else if (localname.equals("temp_c"))else if (localname.equals("temp_f"))else if (localname.equals("humidity"))else if (localname.equals("wind_condition"))else if (localname.equals("day_of_week"))else if (localname.equals("low"))else if (localname.equals("high"))}}
public void characters(char ch, int start, int length)
}以上使用了同dom一樣的設計技巧,在建立saxparser物件的時候,通過乙個saxparse***ctory類來建立具體的saxparser物件,這樣當需要使用不同的解析器的時候,只要改變
乙個環境變數的值,而程式的**可以儲存不變。**如下:
saxparse***ctory spf = saxparse***ctory.newinstance();
在獲得了saxparse***ctory物件之後,要解析xml還需要乙個saxparser或者xmlreader,saxparser是jaxp中對xmlreader的乙個封裝類,而xmlreader是定義在sax2.0中的乙個用
來解析文件的介面。你可以同樣呼叫saxparser或者xmlreader中的parser()方法來解析文件,效果是完全一樣的。不過saxparser中的parser()方法接收更多的引數,可以對不同的
xml文件資料來源進行解析,因而使用起來要比xmlreader方便些
saxparser sp = spf.newsaxparser();
xmlreader xr = spf.getxmlreader();
在建立了xmlreader之後,就可以使用上乙個步驟建立的googleweatherhandler來解析xml**如下:
googleweatherhandler gwh =new googleweahterhandler();
xr.setcontenthandler(gwh);
inputstreamreader isr = new inputstreamreader(url.openstream(),"gbk");
inputsource is = new inputsource(isr);
xr.parse(is);
public class weatherset
public weathercurrentcondition getmycurrentcondition()
public void setmycurrentcondition(weathercurrentcondition mycurrentcondition)
public arraylistgetmyforecastconditions()
public weatherforecastcondition getlastforecastcondition()
}public class cityweather extends activity
private void init()catch (exception e)
}});
button submit_input = (button) findviewbyid(r.id.button001);
submit_input.setonclicklistener(new onclicklistener()catch (exception e)
}});
}private void updateweatherinfoview(int aresourceid, weathercurrentcondition awcc) throws malformedurlexception
private void updateweatherinfoview(int aresourceid, weatherforecastcondition awfc) throws malformedurlexception
//獲取天氣資訊
//通過網路獲取資料
//傳遞給xmlreader解析
public void getcityweather(url url)catch (exception e)}}
//因為我們資訊時通過網路獲得的所有需要在此註冊訪問網路的許可權
Android 天氣預報 完整案例詳解
第七部分 天氣預報 要實現乙個天氣預報的應用,首先需要找到乙個提供天氣資訊的web服務。google提供的天氣預報,其獲取方式有兩種 1 通過經緯度來定位獲得該地區的天氣資訊。在瀏覽器中輸入 30670000和104019996分別表示經度和緯度的資料 即可獲得乙個xml形式的 資料,其中包括了天氣...
android 天氣預報
android有些應用中需要使用天氣預報,來展示今天 未來幾天的天氣狀況,那麼具體怎麼做呢。b 首先需要 國家氣象局提供的天氣預報介面 b 1.風力和濕度 url 2.氣溫和天氣狀況 url 3.7日氣溫 url 後面9位數的是城市編碼 101010100 代表北京。b 其次 城市 訪問乙個城市地區...
android 獲取天氣預報
第一行 中獲取天氣的方法已經不行了,天氣老是不更新。搞了大半天,現在終於搞定了。一。資料 北京通過城市名字獲得天氣資料,json資料 通過城市id獲得天氣資料,json資料 獲得json的資料為 yesterday aqi 86 city 北京 按照道理,接下去應該比較容易了,只需要對json資料解...