宜昌市第七中學(xué) 陳羽修
基于Android平臺的豆瓣網(wǎng)客戶端的設(shè)計與實現(xiàn)
宜昌市第七中學(xué) 陳羽修
豆瓣網(wǎng)是一個以生活文化為內(nèi)容的社區(qū)網(wǎng)站,提供圖書與影音作品信息及其他多種功能的服務(wù)。隨著Android智能手機(jī)的普及,加上Android操作系統(tǒng)強(qiáng)大的功能和開放性的特點,本文基于Android平臺及豆瓣網(wǎng),使用java語言設(shè)計并實現(xiàn)了豆瓣網(wǎng)手機(jī)客戶端,經(jīng)測試,該客戶端在Android手機(jī)上能正確有效的運行,具有一定的實用性。
Android;豆瓣網(wǎng);Java;智能手機(jī)
Android是一種專為智能手機(jī)設(shè)計的操作系統(tǒng)平臺,除了操作系統(tǒng)以外,還包括中間件、手機(jī)應(yīng)用軟件、及Android SDK應(yīng)用開發(fā)組件,供開發(fā)人員開發(fā)Android平臺的應(yīng)用程序。目前Android限定所有的應(yīng)用程序用java語言來編寫。本文利用JDK、 Android SDK和eclipse相結(jié)合的開發(fā)環(huán)境實現(xiàn)了豆瓣網(wǎng)的手機(jī)客戶端,功能包括:首次登陸界面、豆瓣網(wǎng)客戶端授權(quán)、我說功能和友鄰廣播功能。
Android開發(fā)環(huán)境搭建包括JDK、Eclipse、Android SDK、ADT的安裝以及AVD的創(chuàng)建,具體安裝內(nèi)容如下:
Java應(yīng)用程序開發(fā)環(huán)境JDK(Java Development Kit)安裝,安裝完成之后,檢查JDK是否安裝成功;
集成開發(fā)環(huán)境Eclipse安裝;
軟件開發(fā)工具包Android SDK(Software Development Kit)安裝,檢查SDK是否安裝成功;
集成開發(fā)環(huán)境插件ADT(Android Development Tools Plugin for the Eclipse IDE)安裝;
虛擬設(shè)備AVD(Android Virtual Devices),為使Android應(yīng)用程序可以在模擬器上運行,必須創(chuàng)建AVD,創(chuàng)建AVD完畢后,檢查測試環(huán)境是否搭建成功。
設(shè)計主要完成用戶第一次登錄界面,授權(quán)界面(用戶未登錄),用戶登錄界面,顯示“我說”界面,編輯框中輸入“我說”內(nèi)容,發(fā)送“我說”內(nèi)容。
3.1 認(rèn)證及訪問資源的流程
豆瓣網(wǎng)API通過以下四個步驟完成認(rèn)證授權(quán),并訪問或修改受限資源的流程。
步驟一:通過申請的apikey和他的私鑰來獲取未授權(quán)的請求令牌。
通過http://www.douban.com/service/auth/ request-token,獲取未授權(quán)的令牌。
步驟二:獲取請求令牌后請求用戶授權(quán)這個請求令牌。獲取請求令牌之后,需要請求用戶授權(quán)該請求令牌request token需要將瀏覽器跳轉(zhuǎn)到如下網(wǎng)站:http:// www.douban.com/service/oauth/authorize跳轉(zhuǎn)后,用戶會看到請求授權(quán)的頁面用戶可以選擇同意或拒絕授權(quán)。
步驟三:如果用戶授權(quán)了這個請求令牌,那么就用授權(quán)后的請求令牌換取訪問令牌用戶完成授權(quán)后第三方應(yīng)用可以通過訪問如下網(wǎng)址,將已授權(quán)的request token換取access token access token將被用于修改和訪問第三方應(yīng)用已完成授權(quán)http://www.douban.com/service/ auth/access-token。
步驟四:使用訪問令牌訪問或修改受保護(hù)的資源。獲得accesstoken后,用戶的應(yīng)用就可以使用accesstoken訪問或修改資源。
3.2 客戶端功能規(guī)劃設(shè)計
步驟一:用戶第一次登錄時程序會彈出一個對話框提示用戶。
步驟二:進(jìn)入認(rèn)證授權(quán)界面。
步驟三:顯示用戶登錄界面,提示輸入用戶名和密碼,用戶登錄后顯示API授權(quán)界面,單機(jī)確定完成授權(quán),完成授權(quán)后進(jìn)入顯示所有廣播界面,在編輯框里輸入“我說”的內(nèi)容,手機(jī)發(fā)送“我說”的內(nèi)容發(fā)送到服務(wù)器,并在手機(jī)屏幕上顯示出來。
3.3 數(shù)據(jù)存儲設(shè)計
需要存儲的主要有以下幾個數(shù)據(jù):請求令牌值、請求令牌對應(yīng)的密鑰、授權(quán)令牌值、授權(quán)令牌對應(yīng)的密鑰、用戶的id,這些數(shù)據(jù)直接存儲在Android提供的類SharePreference中。
4.1 首次登陸界面設(shè)計
類Activitymain的實現(xiàn),Activitymain繼承了Activity類,在Activitymain中實現(xiàn)用戶首次登陸界面,如果用戶登陸的話,會直接跳轉(zhuǎn)到顯示說說,部分實現(xiàn)代碼如下:
private void showAlertDialog() {
final AlertDialog alert = new AlertDialog.Builder(this).
create();
alert.setMessage(“這是您是第一次登陸,只需要進(jìn)行簡單的配置,您就可以正常使用啦:)”);
alert.setButton(“登陸”, new DialogInterface.
OnClickListener();
}
Acesstokenisvalid()函數(shù)判斷Acesstoken是否合法,如果用戶第一次登錄那么返回的false,表示acesstoken不合法。Showalertdialog()顯示用戶第一次登錄的提示框,程序跳轉(zhuǎn)到activityauth中。首次登陸如圖1所示:
圖1 首次登陸圖
4.2 獲取未授權(quán)的請求令牌并請求用戶授權(quán)的實現(xiàn)
主要實現(xiàn)了豆瓣網(wǎng)客戶端的授權(quán)過程的兩個步驟:
步驟一:獲取未授權(quán)的請求令牌;
步驟二:請求用戶授權(quán)。
在getrequest()函數(shù)里主要得到未授權(quán)的請求令牌和對應(yīng)的請求令牌密鑰并存儲到類SharePreference里。
4.3 授權(quán)令牌換取訪問令牌的實現(xiàn)
Activityauthsuccess的實現(xiàn),當(dāng)用戶在豆瓣網(wǎng)的授權(quán)界面單擊同意按鈕后Activiy跳轉(zhuǎn)到Activitysuccess,在這個Activity里主要完成豆瓣網(wǎng)授權(quán)的第三個步驟:使用授權(quán)后的令牌換取訪問令牌并保存用戶ID,部分實現(xiàn)代碼如下:
//保存token
private String saveAccessToken() {
myService = new DoubanService("subApplication",
DoubanUtil.apiKey, DoubanUtil.secret, true);
String url = myService.getAuthorizationUrl(DoubanUtil. callback);
settings = getSharedPreferences(PreferencesUtil. preferencesDouban, 0);
String requestToken = settings.getString(PreferencesUtil .oauthToken,"false");
String requestTokenSecret = settings.getString(Preferen cesUtil.oauthTokenSecret,
"false");
Log.i("jinyan", "requestToken=" + requestToken);
myService.setRequestToken(requestToken);
myService.setRequestTokenSecret(requestTokenSecret);
ArrayList<String> list = myService.getAccessToken();
String acessToken = list.get(0);
String acessTokenSecret = list.get(1);
Log.i("jinyan", "acessToken=" + acessToken);
Log.i("jinyan", "acessTokenSecret=" + acessTokenSecret);
settings.edit().putString(PreferencesUtil.acessToken, acessToken).putString(PreferencesUtil.acessTokenSecret, acessTokenSecret).commit();
return url;
}
在saveaccesstoken()里我們得到了訪問令牌和與之對應(yīng)的密鑰,并將其保存在SharePreference里,登陸界面如圖2所示。
圖2 登陸界面
4.4 “我說”功能和友鄰廣播功能實現(xiàn)
Activityshowsaying的實現(xiàn),為應(yīng)用中最核心的功能,實現(xiàn)豆瓣網(wǎng)中的“我說”功能和友鄰廣播功能,實現(xiàn)部分代碼如下:
public View getView(int position, View convertView, ViewGroup parent) {
SayingView sayingView;
Saying saying = sayingList.get(position);
if (convertView == null) {
sayingView = new SayingView(mContext, saying);
} else {
sayingView = (SayingView) convertView;
sayingView.setNickname(saying.nickname);
sayingView.setContent(saying.content);
}
return sayingView;
}
圖3 顯示“說說”
4.5 豆瓣網(wǎng)開放API的調(diào)用
主要完成Abstractactivity的實現(xiàn),Abstractactivity是一個抽象的Activity,其中Activityauthsuccess和Activityshowsaying繼承了這個Abstractactivity。在Abstractactivity實現(xiàn)后,通過獲得一個授權(quán)后的豆瓣網(wǎng)服務(wù),可以直接使用java豆瓣網(wǎng)庫的API來調(diào)用豆瓣網(wǎng)開放出來的API。
本文基于Android開發(fā)環(huán)境,結(jié)合豆瓣網(wǎng)的API,采用Java語言編程,設(shè)計并實現(xiàn)了一個Android手機(jī)的應(yīng)用軟件豆瓣網(wǎng)客戶端。經(jīng)在手機(jī)上運行測試,該客戶端操作方便,運行結(jié)果正確,軟件性能好,連接速度快,具有一定的實用價值。
[1]Retour Meier.Android高級編程[M].北京:清華大學(xué)出版社,2010.
[2]郭宏志.Android應(yīng)用開發(fā)詳解[M].電子工業(yè)出版社,2010.
[3]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].機(jī)械工業(yè)出版社,2010.
[4]韓超.Android系統(tǒng)移植開發(fā)概述[M].電子工業(yè)出版社,2011.
[5]張利國,代聞,龔海平.Android移動開發(fā)案例詳解[M].人民郵電出版社,2010.
[6]楊文志.google android程序設(shè)計指南[M].電子工業(yè)出版社,2009.
[7]楊豐盛.a(chǎn)ndroid應(yīng)用開發(fā)揭秘[M].機(jī)械工業(yè)出版社,2010.
[8]郭本?。苿榆浖_發(fā)技術(shù)[M].中國水利水電出版社,2010.
[9]李鐘尉,周小彤,陳丹丹.Java從入門到精通[M].清華大學(xué)出版社,2010.
[10]閆迎利.Java編程[M].清華大學(xué)出版社,2010.
[11]劉培文.Java程序設(shè)計教程[M].中國人民大學(xué)出版社,2009.
[12]Y.Daniel Liang.Introduction to Java Programming[M].機(jī)械工業(yè)出版社,2008.
陳羽修(1998-),湖北宜昌人,現(xiàn)就讀于宜昌市第七中學(xué)。