魏艷鳴
摘要:隨著Android智能手機(jī)平臺的廣泛應(yīng)用,在其平臺下開發(fā)的手機(jī)應(yīng)用程序大大的便利了人們的生活。該文利用聚合數(shù)據(jù)網(wǎng)提供的JSON新聞數(shù)據(jù),設(shè)計(jì)與開發(fā)了一款能查看不同類型的新聞閱讀器。
關(guān)鍵詞:聚合數(shù)據(jù);OKHttp;JSON;ListView
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)07-0084-02
1概述
隨著網(wǎng)絡(luò)的快速發(fā)展和高性能手機(jī)的普及,微信、導(dǎo)航等手機(jī)應(yīng)用程序大大便利了人們的生活[1]。目前,手機(jī)應(yīng)用程序的開發(fā)平臺主要包括蘋果的IOS、Google的Android、微軟的Win7和諾基亞的Symbian等,其中,Android操作系統(tǒng)因其穩(wěn)定性、開源性、低成本等特點(diǎn),成為當(dāng)今社會(huì)主流的一款操作系統(tǒng),也是國內(nèi)用戶群最大的操作系統(tǒng)。本文的主要目的是設(shè)計(jì)與開發(fā)一款基于Android的新聞閱讀器App,用戶可以利用此App查看不同類型的新聞?lì)^條。
2所用技術(shù)
2.1數(shù)據(jù)來源
聚合數(shù)據(jù)(www.juhe.cn)是一家數(shù)據(jù)銀行,提供30大類,100種以上的基礎(chǔ)數(shù)據(jù)API服務(wù),如天氣預(yù)報(bào)、手機(jī)號碼歸屬地、新聞?lì)^條等,是國內(nèi)最大的基礎(chǔ)數(shù)據(jù)API服務(wù)提供商之一。
使用聚合數(shù)據(jù)API服務(wù)需先進(jìn)行注冊,注冊成功后,可以在“個(gè)人中心”à“我的數(shù)據(jù)”平臺下點(diǎn)擊“申請新數(shù)據(jù)”按鈕申請免費(fèi)數(shù)據(jù),但在獲取部分免費(fèi)數(shù)據(jù)時(shí)需要上傳身份證照片進(jìn)行實(shí)名認(rèn)證,認(rèn)證通過后,會(huì)獲取訪問的AppKEY,如圖1所示??梢允褂谩癶ttp://v.juhe.cn/toutiao/index?type=top&key;=APPKEY”訪問此網(wǎng)站API服務(wù)提供的數(shù)據(jù),其中type是新聞?lì)愋停≈祎op(頭條,默認(rèn))、shehui(社會(huì))、guonei(國內(nèi))、guoji(國際)等。
2.2網(wǎng)絡(luò)連接與訪問
Android中提供了一個(gè)用于訪問網(wǎng)絡(luò)的基礎(chǔ)類HttpURLConnection,但用此類訪問網(wǎng)絡(luò)數(shù)據(jù),代碼量較大,需要對獲取的數(shù)據(jù)進(jìn)行處理才能轉(zhuǎn)換為所需的字符串,因此在其基礎(chǔ)上又衍生了許多第三方庫,如OKHttp。OKHttp是一款高效的HTTP客戶端,具有以下優(yōu)勢:
1) 支持連接同一地址的鏈接共享同一個(gè)socket;
2) 通過連接池來減小響應(yīng)延遲;
3) 無縫的支持GZIP來減少數(shù)據(jù)流量;
4) 緩存響應(yīng)數(shù)據(jù)來減少重復(fù)的網(wǎng)絡(luò)請求等。
在項(xiàng)目中使用OKHttp時(shí)需添加依賴,即在build.gradle文件中添加:
compile 'com.squareup.okhttp3:okhttp:3.0.1'
可以通過以下代碼完成對網(wǎng)絡(luò)的GET請求及訪問,其中String jsonData即為我們要獲取的網(wǎng)絡(luò)數(shù)據(jù)。
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().get()
.url(url).build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()){
String jsonData = response.body().string();
}
在此需要注意,由于Android4.0之后,訪問網(wǎng)絡(luò)的代碼只能放在子線程中,因此上面一段代碼需放置到一個(gè)線程中。
2.3 數(shù)據(jù)解析
本文從聚合數(shù)據(jù)網(wǎng)中獲取的新聞數(shù)據(jù)為JSON格式,其主要格式如下所示。
{
"reason": "成功的返回",
"result": {
"stat": "1",
"data": [
{
"uniquekey": "6c4caa0c3ba6e05e2a272892af43c00e",
"title": "發(fā)際線再也回不去了么?…",
"date": "2017-01-05 11:03",
"category": "yule",
"author_name": "騰訊娛樂",
"url": "http://mini.eastday.com/mobile/170105110355287.html?qid=juheshuju",
"thumbnail_pic_s": "http://03.imgmini.eastday.com/mobile/20170105/20170105110355_
806f4ed3fe71d04fa452783d6736a02b_1_mwpm_03200403.jpeg",…},
...]}}
JSON是存儲和交換文本信息的語言,類似 XML,但JSON 比 XML 更小、更快,更易解析。其中“{}”表示對象,用“[]”表示數(shù)組,由這兩種數(shù)據(jù)嵌套可組成各種復(fù)雜數(shù)據(jù)。對JSON解析可以使第三方庫,如GSON,也可以使用Android中提供的最基礎(chǔ)的JSON解析工具,即JSONObject和JSONArray,本文使用后者。針對從聚合中獲取的JSON數(shù)據(jù),我們可以用以下代碼進(jìn)行解析,解析的數(shù)據(jù)封裝在List集合datas中,方便后期顯示在相應(yīng)控件里。
private ArrayList
List
try {
JSONObject o1 = new JSONObject(jsonData);
if (o1.getString("reason").equals("成功的返回")){
JSONObject o2 = o1.getJSONObject("result");
JSONArray array = o2.getJSONArray("data");
for (int i = 0; i < array.length(); i++) {
JSONObject o = array.getJSONObject(i);
NewsInfo data = new NewsInfo();
data.title = o.getString("title");
data.date = o.getString("date");
data.url = o.getString("url");
data.thumbnail_pic_s = o.getString("thumbnail_pic_s");
datas.add(data); }
return (ArrayList
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
2.4顯示數(shù)據(jù)
新聞最終以列表的形式顯示在界面上,本文使用ListView控件[2]顯示新聞列表,當(dāng)數(shù)據(jù)過多時(shí)ListView會(huì)出現(xiàn)滾動(dòng)條,并且能夠根據(jù)數(shù)據(jù)的長度自適應(yīng)屏幕顯示。使用ListView控件時(shí)需要進(jìn)行數(shù)據(jù)適配,這樣才會(huì)在界面上顯示數(shù)據(jù),數(shù)據(jù)適配器就是數(shù)據(jù)與視圖之間的橋梁,本文使用繼承BaseAdapter的自定義數(shù)據(jù)適配器。此外,當(dāng)單擊新聞列表項(xiàng)時(shí),需要進(jìn)入新聞詳情界面,這就需要給ListView控件添加OnItemClickListener監(jiān)聽。
3系統(tǒng)實(shí)現(xiàn)
在Android4.0以后規(guī)定,子線程不能修改主線程的UI界面,因此在MainActivity中,使用Handler消息機(jī)制完成不同線程之間的通信,最終完成系統(tǒng)顯示的界面,如圖2和圖3所示。
4總結(jié)
本文利用聚合網(wǎng)提供的JSON新聞數(shù)據(jù),開發(fā)了一款能查看不同類型的新聞閱讀器,通過OKHttp訪問網(wǎng)絡(luò),使用JSONObject和JSONArray解析數(shù)據(jù),最終把數(shù)據(jù)以列表的形式顯示到ListView控件中。
參考文獻(xiàn):
[1] 季光獻(xiàn).Android系統(tǒng)環(huán)境下應(yīng)用前景與開發(fā)研究[J].軟件,2011,32(10).
[2] 謝景明.Android移動(dòng)開發(fā)基礎(chǔ)案例教程[M].北京:人民郵電出版社,2017:139-146.