版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、目錄 摘要 . 1 需求分析 . 2 一、開發(fā)背景 . 2 二、項目需求分析 . 2 總體設(shè)計 . 2 一、系統(tǒng)規(guī)劃 . 2 二、系統(tǒng)功能界面 . 3 1. 設(shè)置預(yù)報城市界面: . 3 2天氣顯示界面: . 4 3Widget桌面小部件界面: . 5 三設(shè)計目標(biāo) . 6 系統(tǒng)設(shè)計 . 6 一、開發(fā)及運行環(huán)境 . 6 二、數(shù)據(jù)庫設(shè)計 . 6 三、主要方法及步驟 . 7 四、主要方法及技術(shù) . 7 主要模塊 . 7 一、項目框架 . 7 二、主要功能實現(xiàn) . 8 1.獲取城市碼db_weather.db數(shù)據(jù)庫文件 . 8 2.實現(xiàn)可伸縮性列表的的構(gòu)建與過濾 . 12 3.GPS定位功能的實現(xiàn) .
2、15 4.Widget窗體小部件的更新 . 18 功能測試 . 19 結(jié)論 . 23 1 摘要 Window操作系統(tǒng)的誕生成就了微軟帝國,同時也造就了PC時代的繁榮,然而如今,以Android和iPhone手機為代表的智能移動設(shè)備的發(fā)明與互聯(lián)網(wǎng)云技術(shù)的興起卻敲響了PC時代的喪鐘!這也預(yù)示著移動互聯(lián)網(wǎng)時代(3G)已經(jīng)來臨。 在這個互聯(lián)網(wǎng)繁榮的時代,有一顆超新星,以它獨特性能優(yōu)勢與人性化的UI設(shè)計使它在短短的幾年迅速的占領(lǐng)了智能移動設(shè)備的市場份額,它就是Google的Android!這也意味著Google在移動互聯(lián)網(wǎng)時代開始搶跑并領(lǐng)跑。 Android是基于Linux平臺完全開源的手機操作系統(tǒng),同
3、時開發(fā)語言為Java,這對于Java開發(fā)的我們是何等的誘人,程序員的技術(shù)要與時代同行,因此我選擇了以Android為平臺的手機天氣預(yù)報系統(tǒng)來作為我的畢業(yè)設(shè)計,選擇手機天氣預(yù)報系統(tǒng)不僅可以提升技術(shù),同時也很實用,為人們時刻了解天氣狀況和出行帶來了方便。 2 需求分析 一、開發(fā)背景 近幾年來隨著3G技術(shù)成熟和智能手機的不斷普及,移動應(yīng)用的需求與日俱增,移動應(yīng)用開發(fā)成為當(dāng)下最熱門的技術(shù)之一。在Google和Android手機聯(lián)盟的共同推動下,Android在眾多移動應(yīng)用開發(fā)平臺中脫穎而出。Android是一個真正意義上的開源智能手機操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動設(shè)備廠商和開發(fā)者的熱捧。為順
4、應(yīng)潮流,本設(shè)計旨在搭載Android的移動設(shè)備上運行,實現(xiàn)天氣狀況的實時動態(tài)更新與顯示,方便人們的出行與生活。 二、項目需求分析 根據(jù)功能的需求,分析此項目的主要功能應(yīng)具備以下幾點: 1. 精確查詢定位全國各地城市未來幾天內(nèi)的實時天氣狀況 2. 系統(tǒng)要具的實用性,符合用戶查看信息習(xí)慣,界面設(shè)計優(yōu)美 3. 系統(tǒng)要具有穩(wěn)定性,且在一定程度上節(jié)省流量的開銷 總體設(shè)計 一、系統(tǒng)規(guī)劃 由上述的需求,現(xiàn)將系統(tǒng)分為三大模塊:天氣顯示界面模塊、預(yù)報城市設(shè)置模塊與Widget桌面小部件模塊。各系統(tǒng)模塊功能如下: 1). 天氣顯示界面模塊 顯示指定城市三天內(nèi)的天氣狀況,包括日期、城市名稱、溫度、風(fēng)力與當(dāng)日的建議,
5、用戶可通過按菜單鍵來顯示菜單更新當(dāng)前天氣與設(shè)置天氣顯示的界面背景,以及跳轉(zhuǎn)至設(shè)置預(yù)報城市界面來更換預(yù)報城市。 2). 預(yù)報城市設(shè)置模塊 由自動設(shè)置預(yù)報城市與手動設(shè)置二部分組成,自動設(shè)置實現(xiàn)GPS定位功能,自動確定當(dāng)前用戶所在地;而手動設(shè)置則通過可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫中預(yù)存的城市來進行設(shè)置,同時為了方便用戶查找,支持以輸入框的形式來過濾查詢預(yù)報城市。當(dāng)單擊選中城市時跳轉(zhuǎn)至天氣顯示界面,來顯示該城市當(dāng)三天內(nèi)的天氣狀況;第一次運行時自動跳到該界面。 3). Widget桌面小部件模塊 為了方便用戶實時了解天氣狀況,特別添加在Android系統(tǒng)桌面上顯示當(dāng)前天氣與時間的天氣小部件,使用戶拿
6、起手機的第一時刻就能了解天氣,同時當(dāng)用戶單擊小部件時,自動跳轉(zhuǎn)至天氣顯示界面,顯示三天內(nèi)的詳細天氣。 3 二、系統(tǒng)功能界面 1. 設(shè)置預(yù)報城市界面: 1.1 當(dāng)?shù)谝淮芜\行程序時,跳轉(zhuǎn)至城市設(shè)置界面進行預(yù)報城市的選擇: 1.2 用戶可以通過單擊選擇“定位當(dāng)前城市”的方式調(diào)用系統(tǒng)GPS功能自動定位預(yù)報城市: 4 1.3 用戶可通過輸入框過濾查詢當(dāng)前系統(tǒng)中預(yù)存的城市: 2天氣顯示界面: 2.1 選擇了預(yù)報城市后,系統(tǒng)跳轉(zhuǎn)至天氣顯示界面,顯示該城市三天內(nèi)的實時天氣: 5 2.2 在天氣界面中用戶可通過按菜單鍵來調(diào)出菜單,選擇城市,更新天氣與更換背景: 3Widget桌面小部件界面: 方便用戶第一時間了
7、解天氣動態(tài),添加widget顯示功能界面: 6 三設(shè)計目標(biāo) 設(shè)計完成一個實用穩(wěn)定的天氣預(yù)報系統(tǒng),同時要廉價使其能滿足大部分用戶的需求,因此針對上述要求,本設(shè)計應(yīng)滿足: 1. 系統(tǒng)能及時的返反饋指定預(yù)報城市的天氣情況 2. 自動定位用戶所在城市,支持GPS定位 3. 節(jié)省流量開銷,規(guī)定在指定的時間間隔內(nèi)才更新天氣,其它時段顯示緩存的天氣 4. 操作方便快捷,使用簡單,界面設(shè)計美觀大方,支持widget 系統(tǒng)設(shè)計 一、開發(fā)及運行環(huán)境 JDK1.6.10 Eclipse3.5 Android Development Toolkit (ADT) 15.0.0 Android 2.2及以上 Window
8、s XP及以上 二、數(shù)據(jù)庫設(shè)計 由于在本系統(tǒng)中是通過中央氣象臺的WebService 提供的API訪問得到的天氣預(yù)報,在查詢指定城市的天氣時,需要用到它提供的城市碼,而城市碼相對穩(wěn)定不變,所以在構(gòu)建系統(tǒng)時將其事先通過Android的網(wǎng)絡(luò)訪問技術(shù)將其緩沖到本地SQLite數(shù)據(jù)庫進行保存起來,方便以后的查詢,同時節(jié)省了流量開銷。綜上所述在本地建立db_weather.db的數(shù)據(jù)庫,其中的表結(jié)構(gòu)如下: 其中只存在兩個表: provices和citys City中存在city_num用天氣的查詢,同時還存在外鍵province_id與provices表形成1對n的關(guān)系。 7 三、主要方法及步驟 1.
9、搭建Android開發(fā)環(huán)境,并建立一個android2.2版本名為WeatherSystem項目 2. 首先編寫網(wǎng)絡(luò)訪問代碼,訪問象站解析得到所有城市碼并導(dǎo)出保存得到的db_weather.db數(shù)據(jù)文件 3. 在程序第一次運行時,將db_weatcher.db數(shù)據(jù)庫文件導(dǎo)入到應(yīng)用程序數(shù)據(jù)庫中 4. 建立設(shè)置城市界面,讀取數(shù)據(jù)庫文件,獲取省份,城市以及對應(yīng)的城市碼。 5. 接收用戶選擇的城市碼,訪問:得到天氣信息 6. 解析天氣信息,將城市碼及天氣信息緩沖下來,并為其設(shè)置有效時間,方便下次啟動時直接得到天氣信息,過期則從網(wǎng)上更新 7. 定時由保存的城市碼更新天氣信息 四、主要方法及技術(shù) 1. A
10、ndroid手機的界面UI設(shè)計 2. Android的網(wǎng)絡(luò)通信 3. Android的廣播 4. GPS調(diào)用解析 5. Widget小部件編程 6. XML與JSON解析 7. SQLite數(shù)據(jù)庫操作 8. Android文件操作 主要模塊 一、項目框架 在裝有ADT插件的Eclipse中新建一個名為WeatherSystem的Android2.2版本的項目,項目主要文件結(jié)構(gòu)如下: WeatherSystem |_src | |_com.weather.app | | |_MainActivity.java | | |_SetCityActivity.java | | |_UpdateWidg
11、etService.java | | |_WeatherWidget.java | |_p | | |_GPSListAdapter.java | | |_MyListAdpater.java | |_com.weather.dao | | |_DBHelper.java | |_com.weaher.utils 8 | |_LocationXMParser.java | |_WeatherInfoParser.java | |_WebAccessTools.java |_res | |_ drawable | | |_(略) | |_layout | | |_gps.xml | | |_ma
12、in.xml | | |_widget_layout.xml | | |_set_city.xml | |_menu | | |_configure_menu.xml | |_raw | | |_db_weather.db | |_values | | |_color.xml | | |_strings.xml | |_xml | |_weather_widget.xml | |_AndroidManifest.xml 二、主要功能實現(xiàn) 1.獲取城市碼db_weather.db數(shù)據(jù)庫文件 獲取全國各地的城市碼,是通過訪問中央氣象局網(wǎng)從省份直轄市到城鎮(zhèn)一級一級深入得到的,獲得一個地區(qū)的城市碼總共
13、需要訪問4次網(wǎng)絡(luò),分別如下: 1. 訪問號: 2. 訪問的城市編號(如訪問山東: 3. 訪問編號(如訪問濟南: 4. 訪問碼(如訪問長清: 01|北京,02|上海,03|天津,04|重慶,05|黑龍江,06|吉林,07|遼寧,08|內(nèi)蒙古, 1201|濟南,1202|青島,1203|淄博,1204|德州,1205|煙臺,1206|濰坊, 120101|濟南,120102|長清,120103|商河,120104|章丘,120105|平陰,. 120102|101120102 9 首先實現(xiàn)上述功能需使用Android的網(wǎng)絡(luò)訪問技術(shù),故編寫工具類WebAccessTools類如下: 由上面訪問的可知
14、,得到的編碼與名稱都是“編碼名稱”的形式,因此在這也編寫一個解析得到城市碼的工具類WeatherInfoParser,用于解析從服務(wù)器中得到的城市碼: /* * 根據(jù)給定的url地址訪問網(wǎng)絡(luò),得到響應(yīng)內(nèi)容(這里為GET方式訪問) * param url 指定的url地址 * return web服務(wù)器響應(yīng)的內(nèi)容,為String類型,當(dāng)訪問失敗時,返回為null */ public String getWebContent(String url) /創(chuàng)建一個http請求對象 HttpGet request = new HttpGet(url); /創(chuàng)建HttpParams以用來設(shè)置HTTP參數(shù)
15、HttpParams params=new BasicHttpParams(); /設(shè)置連接超時或響應(yīng)超時 HttpConnectionParams.setConnectionTimeout(params, 3000); HttpConnectionParams.setSoTimeout(params, 5000); /創(chuàng)建一個網(wǎng)絡(luò)訪問處理對象 HttpClient httpClient = new DefaultHttpClient(params); try /執(zhí)行請求參數(shù)項 HttpResponse response = httpClient.execute(request); /判斷是否
16、請求成功 if(response.getStatusLine().getStatusCode() = HttpStatus.SC_OK) /獲得響應(yīng)信息 String content = EntityUtils.toString(response.getEntity(); return content; else /網(wǎng)連接失敗,使用Toast顯示提示信息 Toast.makeText(context, 網(wǎng)絡(luò)訪問失敗,請檢查您機器的聯(lián)網(wǎng)設(shè)備!, Toast.LENGTH_LONG).show(); catch(Exception e) e.printStackTrace(); finally /
17、釋放網(wǎng)絡(luò)連接資源 httpClient.getConnectionManager().shutdown(); return null; 10 編寫這兩個類后現(xiàn)在就是編寫從服務(wù)器端用程序遍歷得到全國各地的城市名與城市碼,并將它們分別的保存在String provinces數(shù)組,String childs數(shù)組與String cityCode中: /* * 通過解析content,得到一個一維為城市編號,二維為城市名的二維數(shù)組 * 解析的字符串的形式為: 編號|城市名,編號|城市名,. * param content 需要解析的字符串 * return 封裝有城市編碼與名稱的二維數(shù)組 */ publ
18、ic static String parseCity(String content) /判斷content不為空 if(content!=null&content.trim().length()!=0) StringTokenizer st=new StringTokenizer(content, ,); int count = st.countTokens(); String citys = new Stringcount2; int i=0, index=0; while(st.hasMoreTokens() String city = st.nextToken(); index = ci
19、ty.indexOf(|); citysi0 = city.substring(0, index); citysi1 = city.substring(index+1); i = i+1; return citys; return null; WebAccessTools webTools = new WebAccessTools(this); /得到訪問網(wǎng)絡(luò)的內(nèi)容 String webContent=webTools.getWebContent( /第一次解析得到的為省份或一級直轄市 String provinces = WeaterInfoParser.parseCity(webConte
20、nt); String groups = new Stringprovinces.length; String childs = new Stringprovinces.length; String cityCode = new Stringprovinces.length; for(int i=0; i provinces.length; i+) groupsi = provincesi1; /由省份碼來得到城市碼 StringBuffer urlBuilder= new StringBuffer( urlBuilder.append(provincesi0); urlBuilder.app
21、end(.xml); webContent = webTools.getWebContent(urlBuilder.toString(); 11 接下來就是將得到的上面的三個數(shù)組建立數(shù)據(jù)庫文件db_weather.db保存起來,用到android.database.sqlite.SQLiteDatabase類的靜態(tài)方法: SQLiteDatabase openOrCreateDatabase(String path, CursorFactory factory)來創(chuàng)建一個數(shù)據(jù)庫文件,其中的path表示數(shù)據(jù)庫存放的路徑,而factory中游標(biāo)工廠,這里可將它設(shè)為空,從而得到SQLiteDatab
22、ase對象,則再調(diào)用它的execSQL(String sql)方法來執(zhí)行保存數(shù)據(jù)庫的操作,從而將上面的三個數(shù)組轉(zhuǎn)換為數(shù)據(jù)庫中的數(shù)據(jù),最后使用ADT插件中的DDMS工具將得到的數(shù)據(jù)庫文件從Android模擬器String citys = WeaterInfoParser.parseCity(webContent); /用于保存所的有towns String towns = new Stringcitys.length; /計算總的城鎮(zhèn)數(shù) int sum=0; for(int j=0; jcitys.length; j+) /由城市碼來得到地方碼 urlBuilder= new StringBuf
23、fer( urlBuilder.append(citysj0); urlBuilder.append(.xml); webContent = webTools.getWebContent(urlBuilder.toString(); townsj = WeaterInfoParser.parseCity(webContent); sum = sum + townsj.length; childsi = new Stringsum; cityCodei = new Stringsum; sum=0; for(int j=0; jcitys.length; j+) for(int n=0; nto
24、wnsj.length; n+) if(n=0) childsisum = townsjn1; else childsisum = townsj01 + . + townsjn1; urlBuilder= new StringBuffer( urlBuilder.append(townsjn0); urlBuilder.append(.xml); webContent = webTools.getWebContent(urlBuilder.toString(); String code=WeaterInfoParser.parseCity(webContent); cityCodeisum =
25、 code01; sum = sum + 1; urlBuilder=null; 12 中導(dǎo)出,最終就得到了db_weather.db文件。以后上述的代碼就可以不使用,直接將db_weather.db文件放入資源文件夾res目錄中的raw目錄中,則在程序第一次運行時導(dǎo)入到/data/data/com.weather.app/databases目錄中就行了,其中關(guān)于數(shù)據(jù)庫的導(dǎo)入實際是Java中文件的復(fù)制。 2.實現(xiàn)可伸縮性列表的的構(gòu)建與過濾 實現(xiàn)可伸縮性列表是通過繼承android.widget.BaseExpandableListAdapter適配器實現(xiàn)的,其中主要實現(xiàn)它的public Vie
26、w getGroupView()得列表的一級列表和public void getChildView()得到列表的二級子列表實現(xiàn)的,在這里由于只是實現(xiàn)文本顯示功能,故用TextView組件來填充就行了,如果要構(gòu)造這個自定義的適配器,則只需在提供存放省份直轄市的一級列表的數(shù)組String groups和存放對應(yīng)的城鎮(zhèn)的二級列表的String childs就行了。 同時為了兼具過濾功能,還要需再實現(xiàn)android.widget.Filterable接口,這個接口有一個getFilter()返回Filter過濾器的列表,故還要提供一個Filter過濾類,在本系統(tǒng)中,實現(xiàn)的是一個內(nèi)部類CityFilte
27、r,它繼承android.widget.Filter類,覆蓋實現(xiàn)了兩個方法,一個是performFiltering()得到FilterResults過濾結(jié)果對象方法,另一個是根據(jù)得到的FilterResults對象更新適配器的publishResults()方法。 其中的performFiltering(CharSequence constraint)方法的實現(xiàn)是通過constraint這個關(guān)鍵字以省份直轄市為單位進行匹配,如果匹配成功,則添加該省份以下的所有城市,如果匹配不成功,則再逐一與這個省份的下的城市配匹,則只添加匹配的城市,其中匹配的結(jié)果放在MapInteger, ArrayList
28、 values這樣的向量中,再由新建的FilterResults封裝返回,(具體實現(xiàn)如下): 1. 首先是對關(guān)鍵字進行判斷是否為空,如為空則由values添加所有省份與城市,其中的allGroups和allChilds保存的是所有的省份與對應(yīng)的城市: 2. 如果關(guān)鍵字constraint不為空,則以省份為單位進行匹配,省份匹配的添加下面的所在城鎮(zhèn),如果不匹配,則進行步深入匹配城鎮(zhèn),添加符合條件的城鎮(zhèn): /當(dāng)過濾條件為空時,返回所有的省份與城市 if(constraint = null | constraint.length() = 0) for(int i=0; iallGroups.leng
29、th; i+) ArrayList index = new ArrayList(); /添加所有與之對應(yīng)的城市 for(int j=0; jallChildsi.length; j+) index.add(j); values.put(i, index); 13 3. 得到過濾的結(jié)果后將其用FilterResource封裝后返回: 另外的publishResults(CharSequence constraint, FilterResults results)方法就是根據(jù)上面得到的results對象來得到新的String groups與String Childs數(shù)組,再調(diào)用BaseExpand
30、ableListAdapter父類的notifyDataSetChanged()方法來更新列表,從而實現(xiàn)過濾后結(jié)果的顯示(具體實現(xiàn)如下): 1. 首先將參數(shù)FiltersResuls對象轉(zhuǎn)換為MapInteger, ArrayList filterResult,然后來判斷過濾后的結(jié)果長度時否為0,如果長度為0則說明過濾后的結(jié)果為空,則調(diào)用父類的notifyDataSetInvalidated()方法來阻止列表的更新: 2. 如果長度不為0,則說明存在過濾結(jié)果,則將它轉(zhuǎn)換為groups數(shù)組與childs數(shù)組,并調(diào)用notifyDataSetChanged()方法實再更新: String filt
31、erStr = constraint.toString(); for(int i=0; iallGroups.length; i+) /查找省名是否包含用戶輸入的字符串 if(allGroupsi.contains(filterStr) ArrayList index = new ArrayList(); /添加所有與之對應(yīng)的城市 for(int j=0; jallChildsi.length; j+) index.add(j); values.put(i, index); else ArrayList index = new ArrayList(); /如果省份名沒有,則查找它下面的城市名是
32、否包含 for(int j=0; j 0) values.put(i, index); else index = null; FilterResults results = new FilterResults(); results.values = values; results.count = values.size(); 14 如上所述則就實現(xiàn)了帶有過濾性可伸展性列表適配性的實現(xiàn),則在使用時在XML組件配置文件中使用ExpandableListView列表,并調(diào)用它的setAdapter()方法來,加載自定義的適配器。而在使用它的過濾功能時則調(diào)用自定義適配器的 getFilter()得到過
33、濾Filter對象,再調(diào)用Filter對象的filter(String)方法實現(xiàn)的,在本系統(tǒng)中才用的時觸發(fā)文本輸入框EditText的TextChangedListener事件時調(diào)用從而實現(xiàn)手動選擇預(yù)報城市的過濾查詢。 String newGroups = new Stringcount; String newChilds = new Stringcount; int index = 0; int length = 0; /得到新的groups和childs for(int i=0; iallGroups.length; i+) if(filterResult.containsKey(i) n
34、ewGroupsindex = allGroupsi; /符合條件的城市 ArrayList citys = filterResult.get(i); length = citys.size(); newChildsindex = new Stringlength; for(int j = 0; j length; j+) newChildsindexj = allChildsicitys.get(j); index = index + 1; /設(shè)置groups和childs groups = newGroups; childs = newChilds; /更新列表 notifyDataSet
35、Changed(); /判斷是否展開列表 count = getGroupCount(); if(count 34) /展開伸縮性列表 for(int i=0; icount; i+) provinceList.expandGroup(i); else /收縮伸縮性列表 for(int i=0; icount; i+) provinceList.collapseGroup(i); 15 3.GPS定位功能的實現(xiàn) Android中調(diào)用GPS功能,首先要獲取GPS定位管理器LocationManager,獲取LocationManager后就是獲取LocationProvider,可以通過Crit
36、eria對象設(shè)置過濾條件來獲得最符合用戶需求的LocationProvider,得到LocationProvider后就可通過調(diào)用LocationMananger對象的getLastKnownLocation()方法來獲取Location地址封裝對象,最后由實例化的Geocoder將Location中的經(jīng)度和緯度反編譯為地址信息集合List對象,從而由List對象來得到當(dāng)前用戶地址名。在開發(fā)過程中通過Eclipse中的ADT插件的DDMS可以為Android模擬器指定任意地址,如下: 當(dāng)在模擬器控制面板中指定經(jīng)緯度后,則會在模擬器中出現(xiàn)GPS的標(biāo)志: 但在實際開發(fā)調(diào)用GPS功能過程時,只能獲取
37、經(jīng)度與緯度,而在使用Geocoder反編譯地址時報錯: 使用的調(diào)用代碼如下: 后來通過網(wǎng)上搜索得知在Android2.2模擬器中調(diào)用Geocoder需要backend服務(wù): ”The Geocoder class requires a backend service that is not included in the core android framework. The Geocoder query methods will return an empty list if there no backend service in the platform.“ 16 但并有說此服務(wù)要怎么得到
38、,這看起來像是Android2.2模擬器的一個Bug,故而在本設(shè)計中采用訪問的形式來得到詳備的地址信息(來源于:如下訪問 其中的output參數(shù)指定的是服務(wù)器響應(yīng)的格式,除了XML格式還可以為JSON,CSV等格式。 由此可知,為了實現(xiàn)GPS的定位功能還需要實現(xiàn)一個解析XML的工具類,在本系統(tǒng)中由工具類LocationXMParser完成,它繼承至org.xml.sax.helpers.DefaultHandler類,用于專門用于解析XML文件。 上述的GPS功能具體實現(xiàn)過程如下: 1. 得到LocationManager系統(tǒng)定位服務(wù)管理者: LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 17 2. 設(shè)置Geocoder對象,過濾得到符合條件的LocationProvider,再由LocationProvider得到封裝經(jīng)緯度信息的Location對象: 3. 得到經(jīng)緯度后再訪問XML文本內(nèi)容,并用自定義的LocationXMParser工具類解析封裝得到此經(jīng)緯度對應(yīng)的城市名: /設(shè)置一個Crit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 定制被褥合同范例
- si設(shè)計合同范例
- 低價買房陰陽合同范例
- 挖渠合同范例
- 土建分包合同范例
- 2024年環(huán)保要求下的打樁施工合同
- 2024外派勞務(wù)服務(wù)合同-歐洲市場技術(shù)人員外派協(xié)議3篇
- 情緒管理探析
- 2024年精簡版貸款協(xié)議格式版
- 2024年新型汽車抵押消費貸款合同樣本3篇
- 幼兒游戲的課件
- 中藥鑒定學(xué)智慧樹知到答案2024年中國藥科大學(xué)
- 現(xiàn)代教育技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年濟寧學(xué)院
- 現(xiàn)代通信技術(shù)導(dǎo)論智慧樹知到期末考試答案章節(jié)答案2024年北京科技大學(xué)
- (完整)(電子商務(wù)軟件研發(fā)及產(chǎn)業(yè)化建設(shè)項目)監(jiān)理月報(201202)
- 旅游出行安全告知書
- (完整版)服裝生產(chǎn)工藝流程圖匯總,推薦文檔
- 優(yōu)秀團支部申報表
- 初中體育 健美操初級12個教案
- 常德市垃圾填埋場設(shè)計計算說明書
- 第三章 高分子的溶液性質(zhì)
評論
0/150
提交評論