安卓編程設(shè)計很多方面,非常復(fù)雜,需要系統(tǒng)的學(xué)習(xí)才可以,這里以一個簡單的天氣預(yù)報app編程為例:
我們擁有十年網(wǎng)頁設(shè)計和網(wǎng)站建設(shè)經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信開發(fā)、重慶小程序開發(fā)公司、手機網(wǎng)站制作設(shè)計、HTML5建站、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計或者設(shè)計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計服務(wù)并滿足您的需求。
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ù)報Web Services支持的洲、國內(nèi)外省份和城市信息)
String methodName = "getRegionProvince";
// 創(chuàng)建HttpTransportSE傳輸對象
HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
httpTranstation.debug = true;
// 使用SOAP1.1協(xié)議創(chuàng)建Envelop對象
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 實例化SoapObject對象
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ù)報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();
// 解析出每個省份
result.add(str.split(",")[0]);
}
return result;
}
public static SoapObject getWeatherByCity(String cityName)
{
// 根據(jù)城市或地區(qū)名稱查詢獲得未來三天內(nèi)天氣情況、現(xiàn)在的天氣實況、天氣和生活指數(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;
}
}
一個Android 天氣預(yù)報應(yīng)用程序,通常由Activity、Intent Receiver、Service、Content Provider 四種功能組件構(gòu)成。但是,并不是每一個Android 應(yīng)用程序都需要用到這四種功能組件,而是只需上述四種功能組件的某些組合。
方法步驟(以安卓5.0為例)
一、打開GPS
二、點主屏的“天氣”圖標(biāo)
三、點右上角三個點的圖標(biāo)
四、點“設(shè)定”
五、在下圖右側(cè)的三個紅圈處打上鉤,然后點“自動刷新”。
六、根據(jù)自己的需要選擇自動刷新的時間
七、點“確定”退出
八、可以隨時點刷新圖標(biāo)來手動刷新天氣。
九、提示
1.適時刷新天氣需要開啟GPS定位。
2.在沒有WIFI的地方刷新天氣需要消耗一定的流量,刷新頻率越高,消耗流量越多。
使用搜索引擎可以得到很多的天氣預(yù)報接口,這里以某個api為例
參數(shù)為city=城市名稱
嘗試獲取南昌的天氣預(yù)報
南昌
得到下面xml數(shù)據(jù)
?xml?version="1.0"?encoding="utf-8"?
resp
city南昌/city
updatetime16:55/updatetime
wendu5/wendu
fengli3級/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各類人群可自由活動/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級/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)級/fengli
/day
night
type小到中雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date6日星期天/date
high高溫?10℃/high
low低溫?5℃/low
day
type陰/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date7日星期一/date
high高溫?13℃/high
low低溫?6℃/low
day
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date8日星期二/date
high高溫?13℃/high
low低溫?7℃/low
day
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date9日星期三/date
high高溫?13℃/high
low低溫?10℃/low
day
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
/forecast
zhishus
zhishu
name晨練指數(shù)/name
value不宜/value
detail有較強降水,請避免戶外晨練,建議在室內(nèi)做適當(dāng)鍛煉,保持身體健康。/detail
/zhishu
zhishu
name舒適度/name
value較舒適/value
detail白天有雨,人們會感到有些涼意,但大部分人完全可以接受。/detail
/zhishu
zhishu
name穿衣指數(shù)/name
value較冷/value
detail建議著厚外套加毛衣等服裝。年老體弱者宜著大衣、呢外套加羊毛衫。/detail
/zhishu
zhishu
name感冒指數(shù)/name
value極易發(fā)/value
detail將有一次強降溫過程,天氣寒冷,且空氣濕度較大,極易發(fā)生感冒,請?zhí)貏e注意增加衣服保暖防寒。/detail
/zhishu
zhishu
name晾曬指數(shù)/name
value不宜/value
detail有較強降水,不適宜晾曬。若需要晾曬,請在室內(nèi)準(zhǔn)備出充足的空間。/detail
/zhishu
zhishu
name旅游指數(shù)/name
value較不宜/value
detail天氣稍涼,有微風(fēng),同時有有較強降水,會給出行產(chǎn)生很多麻煩,建議好還是多選擇在室內(nèi)活動!。/detail
/zhishu
zhishu
name紫外線強度/name
value最弱/value
detail屬弱紫外線輻射天氣,無需特別防護(hù)。若長期在戶外,建議涂擦SPF在8-12之間的防曬護(hù)膚品。/detail
/zhishu
zhishu
name洗車指數(shù)/name
value不宜/value
detail不宜洗車,未來24小時內(nèi)有雨,如果在此期間洗車,雨水和路上的泥水可能會再次弄臟您的愛車。/detail
/zhishu
zhishu
name運動指數(shù)/name
value較不宜/value
detail有較強降水,建議您選擇在室內(nèi)進(jìn)行健身休閑運動。/detail
/zhishu
zhishu
name約會指數(shù)/name
value不適宜/value
detail較強降水天氣會給室外約會增添許多麻煩,盡量不要外出約會,最好在室內(nèi)促膝談心。/detail
/zhishu
zhishu
name雨傘指數(shù)/name
value帶傘/value
detail有較強降水,您在外出的時候一定要帶雨傘,以免被雨水淋濕。/detail
/zhishu
/zhishus
/resp
得到數(shù)據(jù)后使用XML解析數(shù)據(jù)即可,最好是建立一個實體類來存儲數(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)){
//更新時間
}else?if("wendu".equals(tag)){
//即時溫度
}else?if("fengli".equals(tag)){
//風(fēng)力
}else?if("shidu".equals(tag)){
//濕度
}else?if("fengxiang".equals(tag)){
//風(fēng)向
}
}
使用搜索引擎可以得到很多的天氣預(yù)報接口,這里以某個api為例
參數(shù)為city=城市名稱
嘗試獲取南昌的天氣預(yù)報
南昌
得到下面xml數(shù)據(jù)
?xml version="1.0" encoding="utf-8"?
resp
city南昌/city
updatetime16:55/updatetime
wendu5/wendu
fengli3級/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各類人群可自由活動/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級/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)級/fengli
/day
night
type小到中雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date6日星期天/date
high高溫 10℃/high
low低溫 5℃/low
day
type陰/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date7日星期一/date
high高溫 13℃/high
low低溫 6℃/low
day
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date8日星期二/date
high高溫 13℃/high
low低溫 7℃/low
day
type晴/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type多云/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
weather
date9日星期三/date
high高溫 13℃/high
low低溫 10℃/low
day
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/day
night
type小雨/type
fengxiang無持續(xù)風(fēng)向/fengxiang
fengli微風(fēng)級/fengli
/night
/weather
/forecast
zhishus
zhishu
name晨練指數(shù)/name
value不宜/value
detail有較強降水,請避免戶外晨練,建議在室內(nèi)做適當(dāng)鍛煉,保持身體健康。/detail
/zhishu
zhishu
name舒適度/name
value較舒適/value
detail白天有雨,人們會感到有些涼意,但大部分人完全可以接受。/detail
/zhishu
zhishu
name穿衣指數(shù)/name
value較冷/value
detail建議著厚外套加毛衣等服裝。年老體弱者宜著大衣、呢外套加羊毛衫。/detail
/zhishu
zhishu
name感冒指數(shù)/name
value極易發(fā)/value
detail將有一次強降溫過程,天氣寒冷,且空氣濕度較大,極易發(fā)生感冒,請?zhí)貏e注意增加衣服保暖防寒。/detail
/zhishu
zhishu
name晾曬指數(shù)/name
value不宜/value
detail有較強降水,不適宜晾曬。若需要晾曬,請在室內(nèi)準(zhǔn)備出充足的空間。/detail
/zhishu
zhishu
name旅游指數(shù)/name
value較不宜/value
detail天氣稍涼,有微風(fēng),同時有有較強降水,會給出行產(chǎn)生很多麻煩,建議好還是多選擇在室內(nèi)活動!。/detail
/zhishu
zhishu
name紫外線強度/name
value最弱/value
detail屬弱紫外線輻射天氣,無需特別防護(hù)。若長期在戶外,建議涂擦SPF在8-12之間的防曬護(hù)膚品。/detail
/zhishu
zhishu
name洗車指數(shù)/name
value不宜/value
detail不宜洗車,未來24小時內(nèi)有雨,如果在此期間洗車,雨水和路上的泥水可能會再次弄臟您的愛車。/detail
/zhishu
zhishu
name運動指數(shù)/name
value較不宜/value
detail有較強降水,建議您選擇在室內(nèi)進(jìn)行健身休閑運動。/detail
/zhishu
zhishu
name約會指數(shù)/name
value不適宜/value
detail較強降水天氣會給室外約會增添許多麻煩,盡量不要外出約會,最好在室內(nèi)促膝談心。/detail
/zhishu
zhishu
name雨傘指數(shù)/name
value帶傘/value
detail有較強降水,您在外出的時候一定要帶雨傘,以免被雨水淋濕。/detail
/zhishu
/zhishus
/resp
得到數(shù)據(jù)后使用XML解析數(shù)據(jù)即可,最好是建立一個實體類來存儲數(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)){
//更新時間
}else if("wendu".equals(tag)){
//即時溫度
}else if("fengli".equals(tag)){
//風(fēng)力
}else if("shidu".equals(tag)){
//濕度
}else if("fengxiang".equals(tag)){
//風(fēng)向
}
}