10天学安卓-第二天
繼續(xù)我們的學習。
相信我,第一天的工作是最為重要的,通過這些工作,我們把開發(fā)安卓所必須的環(huán)境、基礎(chǔ)條件都配置好了,相信肯定遇到了很多問題,不過,根據(jù)我的經(jīng)驗,您會很快解決這些問題的。在第一天的最后,我們終于運行了第一個應用->“Hello, world”。
理論知識
下面我們學習一些理論知識,了解一下安卓系統(tǒng)的架構(gòu)、組件,有了一些基礎(chǔ)知識,才不會感覺迷惑。
先看下整個項目的目錄,每個目錄都有特定的作用,分別如下:
- src目錄,存放源代碼文件。
- gen目錄,由ADT插件自動生成的R.java文件。
- assets目錄,存放資源文件目錄。此目錄的文件不會在R.java中生成資源ID,不會被編譯為二進制,必須使用/assets開始的相對路徑按照文件的方式進行訪問,可以使用AssetManager 結(jié)合其他類進行訪問。
- res目錄,存放資源文件目錄,這里面的每個文件或值都會在R.java中生成一個ID(變量);res/drawable-xxxx是存放圖片的目錄;res/layout是放置布局文件(xml文件)的目錄,每個Activity對應一個XML文件;res/values是放置存儲值的文件(xml)的目錄;res/values/strings.xml 存放鍵值對,一般用在程序的多語言版本切換(多個文件,鍵一樣,值不同);res/values/dimens.xml 尺寸;res/values/styles.xml 樣式
- AndroidManifest.xml是整個應用程序的配置文件,儲存一些 包名,版本號,程序圖標,程序標簽等。
- project.properties,由ADT插件自動生成,不能修改(修改將被刪除)。
?
對于項目結(jié)構(gòu)有了初步的了解之后,我們就可以有目的的開始我們的工作了。接下來的10天,我們將一步一步實現(xiàn)一個完整的天氣預報應用,請注意:是完整的,而不只是Demo。
我們最終的頁面效果如下所示:
?
任務分解
不要被嚇到,不管現(xiàn)在看起來多么復雜,這終究會從我們的手中實現(xiàn)。為了實現(xiàn)這樣的一個應用,我們需要分為一個一個小項目,這樣看起來就不是那么龐然大物,我們心里底氣也足了。
如果您曾經(jīng)做過項目管理相關(guān)工作的話,那么對于WBS(工作分解結(jié)構(gòu))一定很熟悉了,我們的應用規(guī)模不算大,可以分解為如下小項目:
1.?學習調(diào)用HTTP接口,將返回的JSON數(shù)據(jù)封裝為Java類,并且最終將天氣數(shù)據(jù)展示到頁面上
2.?學習使用百度地圖SDK定位當前位置,并將當前位置信息保存為本地數(shù)據(jù)
3. 如果沒有網(wǎng)絡,我們就沒辦法查看天氣了嗎?這當然是有問題的,我們要把天氣數(shù)據(jù)保存到本地數(shù)據(jù)庫,并且默認顯示本地數(shù)據(jù)
4. 美化UI
在這短短的10天內(nèi),我們要把這些工作都做完,不要犯怵,Follow me!!!
千里之行始于足下
新建一個工程,Application Name填Weather,Package Name填com.demo.weather,SDK各個項目的選擇如下:
?
選擇好之后,就一路點擊【Next】直到我們的項目建好為止,建好的項目應該是這樣子的:
?
打開res/layout/activity_main.xml,在Eclipse中應該是這個樣子的:
?
注意視圖的下方有兩個Tab選項卡,【Graphical ?Layout】是圖形視圖,【activity_main.xml】是代碼視圖,我們切換為代碼視圖,在TextView處添加一行代碼,
android:id="@+id/weather"這樣,我們就可以在代碼中使用findViewById方法找到這個TextView控件,不過,為了代碼的美觀,我們將使用另外的辦法。
使用第三方組件
大家都知道,Android是開源的,所以就有很多具有奉獻精神的牛人把自己的經(jīng)驗、收獲分享給大家,這就是很多很多的開源代碼、組件、框架。
在這里我們引入第一個開源組件——xUtils,可以在https://github.com/wyouflf/xUtils這里查看它的詳細說明。
首先,下載jar包,并且導入到我們的工程里面,說起來麻煩,做起來那是相當簡單。下載地址:https://github.com/wyouflf/xUtils/blob/master/xUtils-2.6.11.jar,然后將下載下來的文件放到工程項目的libs文件夾就可以了。
如何在項目中使用呢?
如果大家懶得看xUtils的文檔,那就跟著我一步一步做就好了。
打開src目錄下,com.demo.weather的MainActivity文件,添加一個變量,可以命名為txtWeather。
@ViewInject( R.id.weather ) private TextView txtWeather;這樣,我們就可以在代碼中使用TextView這個控件了。
接下來,我們看一下onCreate方法,這個方法現(xiàn)在只有兩行代碼,
super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main );?
其中第一行,調(diào)用父類的onCreate方法進行界面的繪制,第二行就是加載界面,這兩行代碼在所以的Activity的子類都是需要調(diào)用的,除非你不在界面顯示任何內(nèi)容。
onCreate方法有一個參數(shù)savedInstanceState,關(guān)于這個我們稍后細說,先說第二行代碼
setContentView( R.layout.activity_main );R.layout.activity_main指向了res/layout/activity_main.xml這個文件,這樣界面就知道應該加載這個界面文件了。可能大家都Activity是什么還有些疑惑,不要緊,這些理論知識我們明天再說,今天我們的任務就是把天氣數(shù)據(jù)顯示到界面上。當然,我們自己是不知道天氣預報數(shù)據(jù)的,不過萬能的互聯(lián)網(wǎng)什么都有,百度就提供了這方面的數(shù)據(jù)。
官方文檔:http://developer.baidu.com/map/index.php?title=car/api/weather,
一個例子:http://api.map.baidu.com/telematics/v3/weather?location=%E5%8C%97%E4%BA%AC&output=json&ak=YknGmxIoPugT7YrNrG955YLS
好了,萬事俱備,只欠代碼。如何把天氣顯示到界面上,總共分三步:
1. 在界面上放置一個TextView用于顯示文字,這個我們已經(jīng)完成了。
2. 調(diào)用百度地圖的API,獲取天氣數(shù)據(jù),這個我們接下來就要做。
3. 把數(shù)據(jù)顯示到界面上。
松了一口氣,喝杯茶,休息十分鐘吧,接下來會有大段的代碼等著你來完成。
?
休息好了吧,我們馬上開工。
在onCreate方法的setContentView下面添加以下代碼,
ViewUtils.inject( this );HttpUtils http = new HttpUtils();RequestParams params = new RequestParams();params.addQueryStringParameter( "location", "北京" );params.addQueryStringParameter( "output", "json" );params.addQueryStringParameter( "ak", "YknGmxIoPugT7YrNrG955YLS" );http.send( HttpMethod.GET, "http://api.map.baidu.com/telematics/v3/weather", params, new RequestCallBack<String>(){@Overridepublic void onSuccess( ResponseInfo<String> responseInfo ){String weather = responseInfo.result;txtWeather.setText( weather );}@Overridepublic void onFailure( HttpException arg0, String arg1 ){String weather = arg1;txtWeather.setText( weather );}} );并且刪除onCreateOptionsMenu方法。
保存吧,一大段的代碼,一大片的紅叉,呵呵,不著急,慢慢來,那是因為我們使用了第三方組件的原因,一項一項把缺失的引用添加進來就可以了。如果你嫌麻煩,那么復制這幾行代碼吧。
import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.ViewUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.RequestParams; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; import com.lidroid.xutils.view.annotation.ViewInject;?
這下大家滿足了吧,一切看起來都是那么的順利和完美,來,運行程序。
你看到的可能是這樣的內(nèi)容:
java.io.IOException: Permission denied (missing INTERNET permission?)
為什么?為什么?為什么?
辛辛苦苦,XX都X了,你就讓我看這個。
不著急,不著急,上面寫得很明白,沒有訪問網(wǎng)絡的權(quán)限,那么,在項目里面找到AndroidManifest.xml這個文件,添加一行代碼即可。
<uses-permission android:name="android.permission.INTERNET" />把這行代碼加到?<application 的前面就可以了,好了,一切都OK了。運行吧。
這下界面上顯示的就是一大堆天氣的數(shù)據(jù)了。
?
如果顯示的還不正確,那么請仔細檢查一下是否有遺漏的代碼,是否真的可以連上網(wǎng)絡。
如果您可以正確的顯示上面那一大堆字符,并且能正確理解那一大堆字符的意義,并且對于界面什么的也沒有要求的話,那么我們的天氣預報APP就可以給自己獨家使用了。很有成就感了是不是,不過,這樣的應用除了自己誰會用呢?恐怕連自己也是看都不想看吧。
如果您有更要的要求,那么,明天我們繼續(xù)。
?
附件是本次的工程文件,點擊下載。
posted on 2015-02-02 09:06 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/4266783.html
總結(jié)
以上是生活随笔為你收集整理的10天学安卓-第二天的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARGB和PARGB
- 下一篇: 唯一索引与主键索引的比较