安卓編程設(shè)計(jì)很多方面,非常復(fù)雜,需要系統(tǒng)的學(xué)習(xí)才可以,這里以一個(gè)簡(jiǎn)單的天氣預(yù)報(bào)app編程為例:
潮南網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
public class WebServiceUtil
{
// 定義Web Service的命名空間
static final String SERVICE_NS = "";
// 定義Web Service提供服務(wù)的URL
static final String SERVICE_URL = "";
public static List getProvinceList()
{
// 需要調(diào)用的方法名(獲得本天氣預(yù)報(bào)Web Services支持的洲、國(guó)內(nèi)外省份和城市信息)
String methodName = "getRegionProvince";
// 創(chuàng)建HttpTransportSE傳輸對(duì)象
HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
httpTranstation.debug = true;
// 使用SOAP1.1協(xié)議創(chuàng)建Envelop對(duì)象
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 實(shí)例化SoapObject對(duì)象
SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
envelope.bodyOut = soapObject;
// 設(shè)置與.Net提供的Web Service保持較好的兼容性
envelope.dotNet = true;
try
{
// 調(diào)用Web Service
httpTranstation.call(SERVICE_NS + methodName, envelope);
if (envelope.getResponse() != null)
{
// 獲取服務(wù)器響應(yīng)返回的SOAP消息
SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result.getProperty(methodName
+ "Result");
// 解析服務(wù)器響應(yīng)的SOAP消息。
return parseProvinceOrCity(detail);
}
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public static List getCityListByProvince(String province)
{
// 需要調(diào)用的方法名(獲得本天氣預(yù)報(bào)Web Services支持的城市信息,根據(jù)省份查詢城市集合:帶參數(shù))
String methodName = "getSupportCityString";
HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
httpTranstation.debug = true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
soapObject.addProperty("theRegionCode", province);
envelope.bodyOut = soapObject;
envelope.dotNet = true;
try
{
// 調(diào)用Web Service
httpTranstation.call(SERVICE_NS + methodName, envelope);
if (envelope.getResponse() != null)
{
// 獲取服務(wù)器響應(yīng)返回的SOAP消息
SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result.getProperty(methodName
+ "Result");
// 解析服務(wù)器響應(yīng)的SOAP消息。
return parseProvinceOrCity(detail);
}
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private static List parseProvinceOrCity(SoapObject detail)
{
ArrayList result = new ArrayList();
for (int i = 0; i detail.getPropertyCount(); i++)
{
String str = detail.getProperty(i).toString();
// 解析出每個(gè)省份
result.add(str.split(",")[0]);
}
return result;
}
public static SoapObject getWeatherByCity(String cityName)
{
// 根據(jù)城市或地區(qū)名稱查詢獲得未來三天內(nèi)天氣情況、現(xiàn)在的天氣實(shí)況、天氣和生活指數(shù)
String methodName = "getWeather";
HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
httpTranstation.debug = true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
soapObject.addProperty("theCityCode", cityName);
envelope.bodyOut = soapObject;
envelope.dotNet = true;
try
{
// 調(diào)用Web Service
httpTranstation.call(SERVICE_NS + methodName, envelope);
if (envelope.getResponse() != null)
{
// 獲取服務(wù)器響應(yīng)返回的SOAP消息
SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result.getProperty(methodName
+ "Result");
// 解析服務(wù)器響應(yīng)的SOAP消息。
return detail;
}
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
使用搜索引擎可以得到很多的天氣預(yù)報(bào)接口,這里以某個(gè)api為例
參數(shù)為city=城市名稱
嘗試獲取南昌的天氣預(yù)報(bào)
南昌
得到下面xml數(shù)據(jù)
?xml version="1.0" encoding="utf-8"?
resp
city南昌/city
updatetime16:55/updatetime
wendu5/wendu
fengli3級(jí)/fengli
shidu90%/shidu
fengxiang北風(fēng)/fengxiang
sunrise_106:54/sunrise_1
sunset_117:19/sunset_1
sunrise_2/
sunset_2/
environment
aqi26/aqi
pm2513/pm25
suggest各類人群可自由活動(dòng)/suggest
quality優(yōu)/quality
MajorPollutants/
o344/o3
co1/co
pm1014/pm10
so24/so2
no227/no2
time16:00:00/time
/environment
yesterday
date_14日星期五/date_1
high_1高溫 11℃/high_1
low_1低溫 7℃/low_1
day_1
type_1陰/type_1
fx_1無持續(xù)風(fēng)向/fx_1
fl_1微風(fēng)/fl_1
/day_1
night_1
type_1小到中雨/type_1
fx_1北風(fēng)/fx_1
fl_13-4級(jí)/fl_1
/night_1
/yesterday
forecast
weather
date5日星期六/date
high高溫 7℃/high
low低溫 5℃/low
day
type中到大雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type小到中雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date6日星期天/date
high高溫 10℃/high
low低溫 5℃/low
day
type陰/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date7日星期一/date
high高溫 13℃/high
low低溫 6℃/low
day
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date8日星期二/date
high高溫 13℃/high
low低溫 7℃/low
day
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date9日星期三/date
high高溫 13℃/high
low低溫 10℃/low
day
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
/forecast
zhishus
zhishu
name晨練指數(shù)/name
value不宜/value
detail有較強(qiáng)降水,請(qǐng)避免戶外晨練,建議在室內(nèi)做適當(dāng)鍛煉,保持身體健康。/detail
/zhishu
zhishu
name舒適度/name
value較舒適/value
detail白天有雨,人們會(huì)感到有些涼意,但大部分人完全可以接受。/detail
/zhishu
zhishu
name穿衣指數(shù)/name
value較冷/value
detail建議著厚外套加毛衣等服裝。年老體弱者宜著大衣、呢外套加羊毛衫。/detail
/zhishu
zhishu
name感冒指數(shù)/name
value極易發(fā)/value
detail將有一次強(qiáng)降溫過程,天氣寒冷,且空氣濕度較大,極易發(fā)生感冒,請(qǐng)?zhí)貏e注意增加衣服保暖防寒。/detail
/zhishu
zhishu
name晾曬指數(shù)/name
value不宜/value
detail有較強(qiáng)降水,不適宜晾曬。若需要晾曬,請(qǐng)?jiān)谑覂?nèi)準(zhǔn)備出充足的空間。/detail
/zhishu
zhishu
name旅游指數(shù)/name
value較不宜/value
detail天氣稍涼,有微風(fēng),同時(shí)有有較強(qiáng)降水,會(huì)給出行產(chǎn)生很多麻煩,建議好還是多選擇在室內(nèi)活動(dòng)!。/detail
/zhishu
zhishu
name紫外線強(qiáng)度/name
value最弱/value
detail屬弱紫外線輻射天氣,無需特別防護(hù)。若長(zhǎng)期在戶外,建議涂擦SPF在8-12之間的防曬護(hù)膚品。/detail
/zhishu
zhishu
name洗車指數(shù)/name
value不宜/value
detail不宜洗車,未來24小時(shí)內(nèi)有雨,如果在此期間洗車,雨水和路上的泥水可能會(huì)再次弄臟您的愛車。/detail
/zhishu
zhishu
name運(yùn)動(dòng)指數(shù)/name
value較不宜/value
detail有較強(qiáng)降水,建議您選擇在室內(nèi)進(jìn)行健身休閑運(yùn)動(dòng)。/detail
/zhishu
zhishu
name約會(huì)指數(shù)/name
value不適宜/value
detail較強(qiáng)降水天氣會(huì)給室外約會(huì)增添許多麻煩,盡量不要外出約會(huì),最好在室內(nèi)促膝談心。/detail
/zhishu
zhishu
name雨傘指數(shù)/name
value帶傘/value
detail有較強(qiáng)降水,您在外出的時(shí)候一定要帶雨傘,以免被雨水淋濕。/detail
/zhishu
/zhishus
/resp
得到數(shù)據(jù)后使用XML解析數(shù)據(jù)即可,最好是建立一個(gè)實(shí)體類來存儲(chǔ)數(shù)據(jù)
下面是使用DOM方式解析部分?jǐn)?shù)據(jù)代碼
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//is是網(wǎng)絡(luò)連接得到的輸入流
Document doc = builder.parse(is);
if(doc==null) throw new Exception();
Element element = doc.getDocumentElement();
NodeList childList = element.getChildNodes();
for(int i=0; ichildList.getLength(); i++){
Element e = (Element) childList.item(i);
String tag = e.getTagName();
String text = e.getTextContent();
if("city".equals(tag)){
//城市
}else if("updatetime".equals(tag)){
//更新時(shí)間
}else if("wendu".equals(tag)){
//即時(shí)溫度
}else if("fengli".equals(tag)){
//風(fēng)力
}else if("shidu".equals(tag)){
//濕度
}else if("fengxiang".equals(tag)){
//風(fēng)向
}
}
單以預(yù)報(bào)準(zhǔn)確而言,個(gè)人最為推薦墨跡天氣。一直在用,感覺很好。
1.墨跡天氣
墨跡天氣是一款以預(yù)報(bào)準(zhǔn)確,覆蓋城市廣,流量少,界面華麗等為特點(diǎn)的桌面天氣軟件。
(支持語音播報(bào)天氣,皮膚資源也非常豐富!)
另外還有幾款好的軟件,各有所長(zhǎng)吧。
2.GO天氣
GO天氣是一款華麗炫酷的實(shí)時(shí)天氣預(yù)報(bào)軟件,可查看全球主要城市的天氣。通過訪問美國(guó)及全世界數(shù)萬個(gè)地區(qū)中的最大的專業(yè)天氣網(wǎng),GO天氣在任何時(shí)間任何地點(diǎn),都可以獲得最精確的天氣信息。(Go團(tuán)隊(duì)出品,支持高清天氣視頻,十分華麗?。?/p>
3.MIUI天氣
一款MIUI開發(fā)的天氣軟件,界面時(shí)尚大方美觀,功能強(qiáng)大,支持全國(guó)城市,支持周邊城市天氣預(yù)報(bào),支持天氣提醒,支持污染指數(shù)等功能。
(提取自MIUI固件,高清皮膚,天氣效果動(dòng)態(tài)顯示,給你最華麗的體驗(yàn)!)
4.天氣通
天氣通是一款免費(fèi)手機(jī)天氣預(yù)報(bào)軟件。通過網(wǎng)絡(luò)獲取天氣信息,以直觀的圖文方式顯示,詳盡的城市目錄,支持多個(gè)預(yù)報(bào)網(wǎng)站。桌面圖標(biāo)典雅,天氣網(wǎng)標(biāo)則充滿新意。
(功能全面,支持全屏動(dòng)畫,還有獨(dú)特的日歷備注功能!)
5.華麗動(dòng)態(tài)天氣
Animated Weather是Android手機(jī)上的天氣預(yù)報(bào)應(yīng)用程序,每日動(dòng)態(tài)天氣預(yù)報(bào),逼真的動(dòng)態(tài)天氣特效,自定義背景,支持世界超過50000個(gè)城市的天氣預(yù)報(bào)。
(可自定義背景,支持城市全面?。?/p>
希望對(duì)你有幫助。
方法步驟(以安卓5.0為例)
一、打開GPS
二、點(diǎn)主屏的“天氣”圖標(biāo)
三、點(diǎn)右上角三個(gè)點(diǎn)的圖標(biāo)
四、點(diǎn)“設(shè)定”
五、在下圖右側(cè)的三個(gè)紅圈處打上鉤,然后點(diǎn)“自動(dòng)刷新”。
六、根據(jù)自己的需要選擇自動(dòng)刷新的時(shí)間
七、點(diǎn)“確定”退出
八、可以隨時(shí)點(diǎn)刷新圖標(biāo)來手動(dòng)刷新天氣。
九、提示
1.適時(shí)刷新天氣需要開啟GPS定位。
2.在沒有WIFI的地方刷新天氣需要消耗一定的流量,刷新頻率越高,消耗流量越多。
使用搜索引擎可以得到很多的天氣預(yù)報(bào)接口,這里以某個(gè)api為例
參數(shù)為city=城市名稱
嘗試獲取南昌的天氣預(yù)報(bào)
南昌
得到下面xml數(shù)據(jù)
?xml?version="1.0"?encoding="utf-8"?
resp
city南昌/city
updatetime16:55/updatetime
wendu5/wendu
fengli3級(jí)/fengli
shidu90%/shidu
fengxiang北風(fēng)/fengxiang
sunrise_106:54/sunrise_1
sunset_117:19/sunset_1
sunrise_2/
sunset_2/
environment
aqi26/aqi
pm2513/pm25
suggest各類人群可自由活動(dòng)/suggest
quality優(yōu)/quality
MajorPollutants/
o344/o3
co1/co
pm1014/pm10
so24/so2
no227/no2
time16:00:00/time
/environment
yesterday
date_14日星期五/date_1
high_1高溫?11℃/high_1
low_1低溫?7℃/low_1
day_1
type_1陰/type_1
fx_1無持續(xù)風(fēng)向/fx_1
fl_1微風(fēng)/fl_1
/day_1
night_1
type_1小到中雨/type_1
fx_1北風(fēng)/fx_1
fl_13-4級(jí)/fl_1
/night_1
/yesterday
forecast
weather
date5日星期六/date
high高溫?7℃/high
low低溫?5℃/low
day
type中到大雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type小到中雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date6日星期天/date
high高溫?10℃/high
low低溫?5℃/low
day
type陰/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date7日星期一/date
high高溫?13℃/high
low低溫?6℃/low
day
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date8日星期二/date
high高溫?13℃/high
low低溫?7℃/low
day
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
weather
date9日星期三/date
high高溫?13℃/high
low低溫?10℃/low
day
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/day
night
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級(jí)/fengli
/night
/weather
/forecast
zhishus
zhishu
name晨練指數(shù)/name
value不宜/value
detail有較強(qiáng)降水,請(qǐng)避免戶外晨練,建議在室內(nèi)做適當(dāng)鍛煉,保持身體健康。/detail
/zhishu
zhishu
name舒適度/name
value較舒適/value
detail白天有雨,人們會(huì)感到有些涼意,但大部分人完全可以接受。/detail
/zhishu
zhishu
name穿衣指數(shù)/name
value較冷/value
detail建議著厚外套加毛衣等服裝。年老體弱者宜著大衣、呢外套加羊毛衫。/detail
/zhishu
zhishu
name感冒指數(shù)/name
value極易發(fā)/value
detail將有一次強(qiáng)降溫過程,天氣寒冷,且空氣濕度較大,極易發(fā)生感冒,請(qǐng)?zhí)貏e注意增加衣服保暖防寒。/detail
/zhishu
zhishu
name晾曬指數(shù)/name
value不宜/value
detail有較強(qiáng)降水,不適宜晾曬。若需要晾曬,請(qǐng)?jiān)谑覂?nèi)準(zhǔn)備出充足的空間。/detail
/zhishu
zhishu
name旅游指數(shù)/name
value較不宜/value
detail天氣稍涼,有微風(fēng),同時(shí)有有較強(qiáng)降水,會(huì)給出行產(chǎn)生很多麻煩,建議好還是多選擇在室內(nèi)活動(dòng)!。/detail
/zhishu
zhishu
name紫外線強(qiáng)度/name
value最弱/value
detail屬弱紫外線輻射天氣,無需特別防護(hù)。若長(zhǎng)期在戶外,建議涂擦SPF在8-12之間的防曬護(hù)膚品。/detail
/zhishu
zhishu
name洗車指數(shù)/name
value不宜/value
detail不宜洗車,未來24小時(shí)內(nèi)有雨,如果在此期間洗車,雨水和路上的泥水可能會(huì)再次弄臟您的愛車。/detail
/zhishu
zhishu
name運(yùn)動(dòng)指數(shù)/name
value較不宜/value
detail有較強(qiáng)降水,建議您選擇在室內(nèi)進(jìn)行健身休閑運(yùn)動(dòng)。/detail
/zhishu
zhishu
name約會(huì)指數(shù)/name
value不適宜/value
detail較強(qiáng)降水天氣會(huì)給室外約會(huì)增添許多麻煩,盡量不要外出約會(huì),最好在室內(nèi)促膝談心。/detail
/zhishu
zhishu
name雨傘指數(shù)/name
value帶傘/value
detail有較強(qiáng)降水,您在外出的時(shí)候一定要帶雨傘,以免被雨水淋濕。/detail
/zhishu
/zhishus
/resp
得到數(shù)據(jù)后使用XML解析數(shù)據(jù)即可,最好是建立一個(gè)實(shí)體類來存儲(chǔ)數(shù)據(jù)
下面是使用DOM方式解析部分?jǐn)?shù)據(jù)代碼
DocumentBuilder?builder?=?DocumentBuilderFactory.newInstance().newDocumentBuilder();
//is是網(wǎng)絡(luò)連接得到的輸入流
Document?doc?=?builder.parse(is);
if(doc==null)?throw?new?Exception();
Element?element?=?doc.getDocumentElement();
NodeList?childList?=?element.getChildNodes();
for(int?i=0;?ichildList.getLength();?i++){
Element?e?=?(Element)?childList.item(i);
String?tag?=?e.getTagName();
String?text?=?e.getTextContent();
if("city".equals(tag)){
//城市
}else?if("updatetime".equals(tag)){
//更新時(shí)間
}else?if("wendu".equals(tag)){
//即時(shí)溫度
}else?if("fengli".equals(tag)){
//風(fēng)力
}else?if("shidu".equals(tag)){
//濕度
}else?if("fengxiang".equals(tag)){
//風(fēng)向
}
}