最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

基于Android的旅游導(dǎo)航APP的設(shè)計(jì)與實(shí)現(xiàn)

2022-08-16 15:15 作者:趣畢業(yè)  | 我要投稿

基于Android的旅游導(dǎo)航APP的設(shè)計(jì)與實(shí)現(xiàn)

摘 ?要

截止目前我國已經(jīng)建成比較完善的高速鐵路系統(tǒng),交通十分便捷,同時(shí)80、90后悄然成為了社會主體他們崇尚自由時(shí)尚的生活方式,樂于與人分享自己的生活,喜愛在路途中結(jié)交志同道合的朋友。而前往全國乃至全球各地旅游正是表達(dá)他們鮮活個性的重要方式之一,手機(jī)旅游類app應(yīng)用而生,觀察我們周圍的人,旅游類手機(jī)應(yīng)用基本是必備的,因此旅游app設(shè)計(jì)具有極其廣闊的市場前景。

本文采用了Java語言作為主要的開發(fā)語言,并結(jié)合安卓系統(tǒng)所能提供的功能,對旅游信息進(jìn)行了整理與分類,可以方便的查詢不同地點(diǎn)、不同時(shí)間、不同分類的旅游信息進(jìn)行展示,用戶可以查看旅游的主題、具體的旅游地點(diǎn)、旅游的出發(fā)時(shí)間、行程、以及旅游的價(jià)格,此外還提供了發(fā)起此次旅游的俱樂部,可以致電旅游的負(fù)責(zé)人咨詢具體情況。用戶還可以瀏覽不同景點(diǎn)的魅力圖片,可以實(shí)時(shí)了解驢友們在外發(fā)回的景點(diǎn)信息,以及他們對這個景點(diǎn)的評價(jià),方便用戶更真切的了解這個景點(diǎn)的相關(guān)信息,此外,還為用戶規(guī)劃了出行的路線,推薦的景點(diǎn),還可以使用第三方登陸,發(fā)表個人看法和觀點(diǎn)等。

?

關(guān)鍵字:數(shù)據(jù)分類;Android組件沖突處理;旅游;導(dǎo)航

?

?

?

?

?

?

?

?

?

?

Based on the Design and Implementation of Android's Travel Navigation APP

Abstract

So far our country has built more perfect high-speed rail system, the traffic is very convenient, quietly after 80, 90, at the same time is to become the social main body, they advocate free fashionable way of life, to share your life and people, love in the way of making friends. And went to the country and travel around the world is one of the important way to express their lively personality, an app for mobile travel class, observe the people around us, tourist class mobile application basic is necessary, so the travel app design has very broad market prospects.

This article used the Java language as the main development language, and combined with the functionality provided by the android system, tourist information for the arrangement and classification, can easily query different locations, different time, different classification of tourism information display, the user can view the theme and specific tourist destination of tourism, tourist's departure time, travel, and tourism, in addition also provides the travel club, can call the travel, the head of the advisory details. Users can also see pictures the charm of different sites, can live more information you trekkers out back to the scenic spots, and their evaluation in the scenic spot, convenient for users to more real understanding of the information about the scenic spots, in addition, also for the user to plan the travel route, the recommended attractions, you can also use the third party and published personal views and opinions, etc.

?

Key Words?: data classification ; Android component processing ; tourism conflict ; navigate

?

?

?

?

?

?

?


目??錄

1 ?概論

1.1 研究現(xiàn)狀

1.2 系統(tǒng)開發(fā)意義

1.3 系統(tǒng)開發(fā)背景

2 ?開發(fā)環(huán)境以及相關(guān)技術(shù)

2.1 Eclipse

2.2 Adroid

2.2.1 基本概念

2.2.2 簡介

2.2.3 系統(tǒng)架構(gòu)

2.2.4 四大組件

2.3 Java語言

2.4 SQLite

2.4.1 簡介

2.4.2 架構(gòu)

2.4.3 特點(diǎn)

2.5 FastJson

2.5.1 簡介

2.5.2 FastJson解析JSON步驟

3 ?需求分析

3.1 可行性分析

3.1.1 技術(shù)可行性

3.1.2 經(jīng)濟(jì)可行性

3.1.3 社會可行性

3.2 功能需求分析

3.3 特性需求分析

4 ?概要設(shè)計(jì)

4.1 系統(tǒng)總體功能結(jié)構(gòu)

4.2 系統(tǒng)總體架構(gòu)

5 ?詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)

5.1 系統(tǒng)總體功能設(shè)計(jì)

5.1.1 服務(wù)器端說明

5.1.2 客戶端說明

5.2 系統(tǒng)的實(shí)現(xiàn)

5.2.1 活動模塊

5.2.2 游記模塊

5.2.3 導(dǎo)航模塊

5.2.4 我的模塊

5.3 實(shí)現(xiàn)的技術(shù)點(diǎn)

5.3.1 界面布局的實(shí)現(xiàn)

5.3.2 代碼中所用到的技術(shù)

6 ?軟件測試

6.1 軟件測試的重要性

6.2 測試實(shí)例的研究與選擇

6.3 系統(tǒng)運(yùn)行情況

6.4 系統(tǒng)評價(jià)

7 ?總結(jié)

參考文獻(xiàn)

??

外文原文

中文翻譯

?

?


1??概論

1.1 研究現(xiàn)狀

隨著手機(jī)通信技術(shù)在近些年的迅猛發(fā)展,智能手機(jī)時(shí)代悄然到來。這是一個新的時(shí)代,它改變著我們的生活方式,穿衣人們會去“淘寶”、“京東”足不出戶的買到喜歡的衣服,吃的會有“餓了么”等外賣的軟件,住又有諸如“58同城”這樣的APP應(yīng)用軟件,出行更有“12306”等眾多的手機(jī)應(yīng)用幫你訂票,訂酒店,先進(jìn)的網(wǎng)絡(luò)通信和智能手機(jī)讓我們的生活變得更加便捷,移動手機(jī)端的網(wǎng)絡(luò)用戶人數(shù)早已經(jīng)超越其他方式上網(wǎng)人數(shù),有用戶就會有市場,這是一個嶄新的通信時(shí)代。

手機(jī)的操作系統(tǒng),Android與IOS占據(jù)了絕大部分,由于IOS只應(yīng)用于蘋果手機(jī),因此Android系統(tǒng)是應(yīng)用最為廣泛的移動端操作系統(tǒng),它是開源的,系統(tǒng)整體也是開放的,更新比較快,操作簡單,用戶界面友好型在不斷進(jìn)步,正是因?yàn)檫@些其他系統(tǒng)不具備的優(yōu)點(diǎn),Android毫無疑問的成為了手機(jī)端操作系統(tǒng)的第一。

80、90后正在愛上旅行,在我的針對大學(xué)生是否愿意外出旅游的問卷調(diào)查中,只有極少數(shù)的人表示不愿意出行旅游,絕大多數(shù)人表示會在每年的起碼有兩次出行旅游的計(jì)劃。另外有關(guān)調(diào)查也證實(shí),年輕人出行更愿意自由自主結(jié)伴而行,在人數(shù)上以2到7人居多,其中可能有人是素未謀面,主要依靠網(wǎng)絡(luò)交流溝通,不是很愿意集體報(bào)團(tuán)出行。

我們與他人的認(rèn)識往往是通過一個班,一個學(xué)校,一個社團(tuán)、一個公司等等的一個個的小圈子互相了解,這樣的認(rèn)識方式有著很大的局限性,你不知道你是否會遇到和你一樣喜歡旅行的人,旅游app的出行正好解決這個問題,人們在這里交流,寫下自己的心得體會,可以結(jié)伴出行,可以給還沒出行旅游準(zhǔn)備去的人建議,甚至于大家可以在路上進(jìn)行交流,這樣的應(yīng)用極大程度的減少了我們自己去篩選朋友去旅行的時(shí)間,給了喜歡旅行的人們一片快捷交流的樂土。

1.2 系統(tǒng)開發(fā)意義

我們可以看到,周邊的智能手機(jī)越來越多的出現(xiàn),幾乎已經(jīng)成為了年輕人的必需物品,這個比例還在不斷的增大,與此同時(shí)4G已經(jīng)是全面進(jìn)入了我們的生活,用戶的需求越來越多要求越來越高,正是在這樣的大的時(shí)代背景下,各種應(yīng)用軟件開始進(jìn)入手機(jī)市場,并且日益成為互動娛樂的焦點(diǎn)。

我國的旅游業(yè)有著極其廣闊的市場,旅游已經(jīng)成為了大多數(shù)家庭每年的假期必備的活動之一,各個旅游景點(diǎn)的收入幾何式良性增長,景區(qū)投入不斷增多,基礎(chǔ)設(shè)施不斷得到改善,給了游客更加美好的旅游體驗(yàn),進(jìn)一步吸引著游客的到來,這是一種良性的增長,旅游市場必將繼續(xù)長期健康發(fā)展,中國的旅游人數(shù)規(guī)模每一年都在創(chuàng)造新的記錄,這得益于我們的國家的迅猛進(jìn)步,全世界都在爭奪中國的游客,優(yōu)惠措施不斷,目前出境游也是比較普遍的一種旅游方式。

因此,旅游業(yè)的迅猛發(fā)展是的傳統(tǒng)的人工導(dǎo)游方式不在能滿足新時(shí)代用戶的多元化需求,長期以來游客在景點(diǎn)旅游時(shí)只能是走馬觀花,對景點(diǎn)信息了解甚少,并且對于一些外來游客可能會由于語言障礙而導(dǎo)致旅游質(zhì)量下降。于是,基于上述種種,旅游導(dǎo)航app也成為了現(xiàn)在炙手可熱的手機(jī)app之一。

本設(shè)計(jì)是為實(shí)現(xiàn)一個方便用戶出行的目的。具體而言,本設(shè)計(jì)可以推薦旅游景點(diǎn),瀏覽驢友們在野外徒步的場景,通過導(dǎo)航信息,用戶可以方便的了解一個景點(diǎn)的特色,最近的活動,有沒優(yōu)惠價(jià),以及根據(jù)時(shí)間分類,可以準(zhǔn)確的推薦最近一段時(shí)間的旅游團(tuán)動向,并附有旅游團(tuán)的聯(lián)系方式,方便用戶直接用電話進(jìn)行咨詢,再確定是否參加本次活動;在此基礎(chǔ)上,根據(jù)數(shù)據(jù)源的數(shù)據(jù)結(jié)構(gòu)以及字段分析,把旅游的信息按地點(diǎn)進(jìn)行分類,每個城市的旅游信息直觀的展現(xiàn)在用戶的面前,并且將旅游的類型進(jìn)行了匯總,冒險(xiǎn)類、休閑類、娛樂類等豐富信息供用戶選擇,此外也考慮到了用戶的經(jīng)濟(jì)承受能力,所以,還實(shí)現(xiàn)了根據(jù)本次旅游的價(jià)格信息進(jìn)行進(jìn)一步整合,可以讓用戶很直觀并且很快得找見適合自己經(jīng)濟(jì)承受能力的旅游景點(diǎn)。當(dāng)然,光有這些信息是完全不夠的,用戶之間最好能進(jìn)行互動,交流旅游心得,欣賞對方去過的地方,還可以進(jìn)行點(diǎn)贊,要實(shí)現(xiàn)這個功能,當(dāng)然離不開第三方登陸,微博、QQ可以任意選擇,在登陸成功后可以對個人信息進(jìn)行查看與設(shè)置,擁有這些功能,符合廣大用戶的需求,這也是我做這個軟件的初衷。

1.3 系統(tǒng)開發(fā)背景

近些年來,手機(jī)有關(guān)于旅游的智能應(yīng)用在旅游人群中的使用越來越普遍,整個旅游業(yè),在這種大背景的情況下,已經(jīng)進(jìn)入了一個手機(jī)客戶端時(shí)代,這里面的原因顯而易見,相比傳統(tǒng)的旅游營銷形式,它的成本相對低廉,給游客更加直觀的體驗(yàn),旅游資源豐富,所展示的旅游資源更便于被游客接受選擇。我們現(xiàn)在看國內(nèi)目前的情況,途牛旅游,阿里旅行等等眾多App已經(jīng)在線上有了不俗的表現(xiàn),這個市場正在蓬勃發(fā)展,前景非常好。面對眾多的旅游類App,我們開發(fā)的應(yīng)用軟件有著殘酷的競爭環(huán)境,為了讓我們的應(yīng)用有一席之地,這就要求我們必須嚴(yán)把軟件質(zhì)量關(guān),優(yōu)化界面,提供便捷的功能,也需要后期推廣工作的跟進(jìn)。下面我們來談?wù)撘幌挛覈嘘P(guān)旅游的App的幾種類型:

1.導(dǎo)游類

導(dǎo)游類可以說是旅游類App中最多的類型之一,應(yīng)用及其廣泛,它擁有著很強(qiáng)大的功能,可以為游客提供導(dǎo)航、查看地圖、語音助手等多種幫助,甚至有一部分App擁有規(guī)劃出行行程的功能。我們以“澳門旅游導(dǎo)覽”智能手機(jī)為例,游客在使用時(shí),只需要將攝像頭對準(zhǔn)周圍建筑,就可以得到景點(diǎn)、飯店、交通方式等信息在屏幕上,此時(shí)游客可以選擇查看需要的詳細(xì)信息;還有以“圖讀世界”為特色的FotoPedia,他們聘用專業(yè)的攝影師,在每一個城市中取景、拍攝,進(jìn)而進(jìn)行圖片的整理和分類,這樣,游客就可以在家里完善自己的App上有的城市的旅游行程。當(dāng)然這些手機(jī)應(yīng)用軟件都是需要部署在智能手機(jī)之上的。

2.工具類

工具類App相比其他主要類型,數(shù)量比較少,它針對特殊的一類游客,用以滿足游客的特別需求,因?yàn)樗墓δ軉我?,所以推廣范圍偏小。例如,蝸??萍嫉摹奥糜畏g隨我行”,這個App可以為用戶提供翻譯的服務(wù),針對的是所在旅游地區(qū)的外語、方言等,便于游客的異鄉(xiāng)交流,作為游客的工具存在。又例如百度推出多年的“百度地圖”,可以為游客提供地鐵公交等不同的出行路線、方式,簡單易用,可以為我們在旅行中避免很多的麻煩。

3.預(yù)定類

預(yù)定類旅游App是經(jīng)常出差,商務(wù)人士的必備軟件,同時(shí)也是很多游客所必需的旅游App,可以十分便捷的解決用戶的的住、行兩大問題,提供火車、飛機(jī)等不同出行方式,便捷購票,也可以 讓我們便捷的預(yù)定酒店。這類App的突出優(yōu)勢就是它的網(wǎng)絡(luò)預(yù)定服務(wù),為用戶解決了主要的問題。這類App也是占據(jù)了主要的市場,攜程旅行App、藝龍等手機(jī)應(yīng)用就是他們的突出代表,它們與航空公司、鐵路部門等合作,提供了便捷的出行方式,它們與眾多連鎖酒店合作,長期提供高中低各種酒店的預(yù)定服務(wù),無論是對于酒店還是游客都提供了極大的便利。

4.分享類

當(dāng)前的網(wǎng)絡(luò)中,社交網(wǎng)絡(luò)是最具影響力的,沒有之一。什么都離不開社交網(wǎng)絡(luò)的曝光和推廣。第四大類旅游App我們就來說說分享類App,它是旅行與社交結(jié)合的產(chǎn)物,這類App提供了不同時(shí)期不同地區(qū)的游客對于特定旅游地的不同感覺,給別人提供一種參考,也可以是一種心得的分享,類似于在朋友圈的秀生活。它們把擁有同樣愛好旅行和社交的人都聚集在一起,給人們以交流空間。這里以“面包旅行App”為例,它可以獲取游客的GPS定位記錄以及所拍照片的位置,軟件將會幫我們把足跡連接起來,得到完整的足跡,也可以生成照片墻,帶有時(shí)間軸,當(dāng)然也就可以為其他有興趣的游客實(shí)現(xiàn)直播一路的風(fēng)景。這類App還在發(fā)展中,數(shù)量不是特別多,但是用戶不易流失,因?yàn)樗麄兌际巧缃慌c旅行的共同愛好者。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

2 ?開發(fā)環(huán)境以及相關(guān)技術(shù)

2.1 Eclipse

開發(fā)環(huán)境對于Android開發(fā)來說那一定是非常重要且必不可少的一項(xiàng)。我所使用的開發(fā)環(huán)境就是在Eclipse中配置了一下JDK的環(huán)境變量,然后還需要配置SDK(Software Development Kit)和ADT(Android Development Tools),從而搭建起開發(fā)Android所需要的環(huán)境。

Eclipse 是一個跨平臺的自由的集成性的軟件開發(fā)環(huán)境(IDE),是一個開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺。它是一個框架以及一組服務(wù),可以構(gòu)建我們所需要的開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(Java Development Kit,JDK)。很多程序員喜歡把 Eclipse 視為 Java 開發(fā)環(huán)境(IDE),然而Ecplicse的功能卻完全不止這些而已。它還提供了插件的開發(fā)環(huán)境(PDE),軟件的開發(fā)相關(guān)人員可以使用這個來進(jìn)行功能的擴(kuò)展。

SDK簡介:SDK提供了在Windows/Linux等系統(tǒng)下開發(fā)Android軟件的組件,Android支持的所有平臺,其包含了在Android平臺上開發(fā)移動應(yīng)用的各種工具集。SDK的基礎(chǔ)語言是Java,Android軟件應(yīng)用可以在此基礎(chǔ)上進(jìn)行開發(fā)。

ADT簡介:在IED中建立安卓應(yīng)用的插件,它擴(kuò)展了極其豐富的功能,使得Eclipse更加實(shí)用,更加方便的創(chuàng)建一個app的用戶界面。

在SDK與ADT的配置全部成功之后,Android應(yīng)用程序就可以正式開始進(jìn)行了。

2.2 Adroid

2.2.1 基本概念

Android在英文中譯為“機(jī)器人”,它是一個應(yīng)用于移動端手機(jī)的操作系統(tǒng),也就是中文所說的安卓,安卓系統(tǒng)改革了手機(jī)的使用方式,觸摸屏開始廣泛被使用。于互聯(lián)網(wǎng)的推廣起到了極大的推進(jìn)作用。眾所周知Android,實(shí)際上是由java語言編寫而成,在面向?qū)ο蠓矫?,更易操作,使用的門檻特別低,這就為安卓的應(yīng)用開發(fā)以及推廣都提供了極大極大的便利。

2.2.2 簡介

Android系統(tǒng)有以下5個特點(diǎn):

1.開放性。

2.應(yīng)用程序無界限。

3.應(yīng)用程序方便擴(kuò)展。

4.應(yīng)用程序可以更便于嵌入接口。

5.應(yīng)用程序可以并行運(yùn)行。

2.2.3 系統(tǒng)架構(gòu)

Android SDK是由內(nèi)核層、運(yùn)行層、框架層以及應(yīng)用層組成:

1.應(yīng)用層:使用仿真器運(yùn)行java程序。

2.框架層:簡化開發(fā)過程,規(guī)范開發(fā)的設(shè)計(jì)過程。

3.運(yùn)行層:在運(yùn)行時(shí)可以通過一些不同的庫使得不同的組件可以更好的運(yùn)行,進(jìn)而更好的為我們服務(wù)。

4.內(nèi)核層:是Linux內(nèi)核搭載下的Android的核心系統(tǒng)服務(wù)。

?

?

?

?

?

?

?

?

?

圖2-1?Android系統(tǒng)架構(gòu)圖

2.2.4?四大組件

Android系統(tǒng)有四大組件,它們是安卓系統(tǒng)上實(shí)現(xiàn)對應(yīng)用程序的實(shí)例化所必需的部分,下面我們分別來看:

1Activity

為Java開發(fā)的應(yīng)用程序提供一個可視化的,可以提供給用戶的界面。

2Service

后臺運(yùn)行的,持續(xù)伴隨用戶使用的服務(wù),service可以在用戶使用時(shí)提供其他服務(wù)。

3?Broadcast Receiver

接收響應(yīng)通知,特殊一類型的組件,它不包含任何的用戶界面。

4Content Provider

這是由Android提供的一種標(biāo)準(zhǔn)的、可以共享數(shù)據(jù)的機(jī)制。

2.3 Java語言

Java的編程語言風(fēng)格,十分接近C、C++語言。從它誕生以來就由于它的簡單易學(xué)的特性而飽受喜愛,而且它又是面向?qū)ο蟮恼Z言,幫助程序員簡化了很多問題,跨平臺的特性更是具有極大的現(xiàn)實(shí)意義,自帶了垃圾回收機(jī)制,使得操作得到簡化,因?yàn)樗鼡碛械倪@些眾多優(yōu)點(diǎn),java語言應(yīng)用十分廣泛。

2.4 SQLite

2.4.1 簡介

SQLite是一個開源的嵌入式關(guān)系數(shù)據(jù)庫。它是D.?RichardHipp建立的公有領(lǐng)域項(xiàng)目。數(shù)據(jù)庫應(yīng)用廣泛,也是應(yīng)用最廣泛的數(shù)據(jù)庫操作系統(tǒng)之一,要求硬件環(huán)境低,操作簡單,易于管理,容易嵌入到軟件中。

2.4.2 架構(gòu)

SQLite架構(gòu)由四個子系統(tǒng)構(gòu)成:

1.接口(Interface)

2.編譯器(Compiler)

3.虛擬機(jī)(Virtual Machine)

4.后端(Back-End)

2.4.3 特點(diǎn)

1.零配置(Zero Configuration)

2.可移植(Portability)

它是運(yùn)行在Windows,Linux,BSD,Mac OS X和一些商用Unix系統(tǒng),比如Sun的Solaris,IBM的AIX,同樣,它也可以工作在許多嵌入式操作系統(tǒng)下,比如QNX,VxWorks,Palm OS, Symbin和Windows CE。

3、小而緊湊(Compactness)

SQLite是被設(shè)計(jì)成輕量級,自包含的。

4、簡單(Simplicity)

5、靈活(Flexibility)

6、可靠(Reliability)

SQLite采用模塊化的編碼方式,因此語句比較可靠,也比較容易讓人認(rèn)知。

2.5?FastJson

2.5.1?簡介

????阿里巴巴的FastJson是一個Json處理工具包,包括“序列化”和“反序列化”兩部分,它具備如下特征:

1、速度最快:

測試表明,F(xiàn)astjson具有極快的性能,超越任何其他的Java Json parser。包括自稱最快的JackJson;

????2、功能強(qiáng)大:

完全支持Java Bean、集合、Map、日期、Enum(枚舉);支持范型,支持自省;無依賴,能夠直接運(yùn)行在Java SE 5.0以上版本;支持Android;

Fastjson API入口類是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON類上的靜態(tài)方法直接完成。

public static final Object parse(String text); // 把JSON文本parse為JSONObject或者JSONArray

public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject ???

public static final ?T parseObject(String text, Class clazz); // 把JSON文本parse為JavaBean

public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray

public static final ?List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合

public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文本

public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化為帶格式的JSON文本

public static final Object toJSON(Object javaObject); 將JavaBean轉(zhuǎn)換為JSONObject或者JSONArray。

2.5.2?FastJson解析JSON步驟

A、服務(wù)器端將數(shù)據(jù)轉(zhuǎn)換成json字符串

首先,服務(wù)器端項(xiàng)目要導(dǎo)入阿里巴巴的fastjson的jar包至builtPath路徑下;

?

圖2-2?fastjson的jar包

然后將數(shù)據(jù)轉(zhuǎn)為json字符串,核心函數(shù)是:

????????public static String createJsonString(Object value)

?????????????{

?????????????????String alibabaJson = JSON.toJSONString(value);

?????????????????return alibabaJson;

?????????????}

B、客戶端將json字符串轉(zhuǎn)換為相應(yīng)的javaBean

1、客戶端獲取json字符串

public class HttpUtil

??????{

??????????public static String getJsonContent(String urlStr)

??????????{

??????????????try

??????????????{// 獲取HttpURLConnection連接對象

??????????????????URL url = new URL(urlStr);

??????????????????HttpURLConnection httpConn = (HttpURLConnection) url

??????????????????????????.openConnection();

??????????????????// 設(shè)置連接屬性

??????????????????httpConn.setConnectTimeout(3000);

??????????????????httpConn.setDoInput(true);

??????????????????httpConn.setRequestMethod("GET");

??????????????????// 獲取相應(yīng)碼

??????????????????int respCode = httpConn.getResponseCode();

??????????????????if (respCode == 200)

??????????????????{

??????????????????????return ConvertStream2Json(httpConn.getInputStream());

??????????????????}

??????????????}

??????????????catch (MalformedURLException e)

??????????????{

??????????????????// TODO Auto-generated catch block

??????????????????e.printStackTrace();

??????????????}

??????????????catch (IOException e)

??????????????{

??????????????????// TODO Auto-generated catch block

??????????????????e.printStackTrace();

??????????????}

??????????????return "";

??????????}

????

??????????private static String ConvertStream2Json(InputStream inputStream)

??????????{

??????????????String jsonStr = "";

??????????????// ByteArrayOutputStream相當(dāng)于內(nèi)存輸出流

??????????????ByteArrayOutputStream out = new ByteArrayOutputStream();

??????????????byte[] buffer = new byte[1024];

??????????????int len = 0;

??????????????// 將輸入流轉(zhuǎn)移到內(nèi)存輸出流中

??????????????try

?????????{

??????????????????while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)

??????????????????{

??????????????????????out.write(buffer, 0, len);

??????????????????}

??????????????????// 將內(nèi)存流轉(zhuǎn)換為字符串

??????????????????jsonStr = new String(out.toByteArray());

??????????????}

??????????????catch (IOException e)

??????????????{

??????????????????// TODO Auto-generated catch block

??????????????????e.printStackTrace();

??????????????}

??????????????return jsonStr;

??????????}

?}

2、使用泛型獲取javaBean(核心函數(shù))

??????????public static T getPerson(String jsonString, Class cls) {

??????????????T t = null;

??????????????try {

??????????????????t = JSON.parseObject(jsonString, cls);

??????????????} catch (Exception e) {

??????????????????// TODO: handle exception

??????????????}

??????????????return t;

??????????}

?public static List getPersons(String jsonString, Class cls) {

??????????????List list = new ArrayList();

??????????????try {

??????????????????list = JSON.parseArray(jsonString, cls);

??????????????} catch (Exception e) {

??????????????}

??????????????return list;

??????????}

?public static List> listKeyMaps(String jsonString) {

??????????????List> list = new ArrayList>();

??????????????try {

???????????????????list = JSON.parseObject(jsonString,

??????????????????????????new TypeReference>>() {

??????????????????});

??????????????} catch (Exception e) {

??????????????????// TODO: handle exception

??????????????}

??????????????return list;

??????????}

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

3 ?需求分析

系統(tǒng)分析的真正含義就是對系統(tǒng),從技術(shù)可行性、經(jīng)濟(jì)可行性以及操作可行性來進(jìn)行分析。

3.1?可行性分析

在這里就依次從技術(shù)的、經(jīng)濟(jì)的、社會的可行性三個方面來對本旅游導(dǎo)航APP進(jìn)行深入的分析和研究。

3.1.1?技術(shù)可行性

該軟件是基于Java語言、并以SQLite為后臺數(shù)據(jù)庫。硬件、軟件的性能要求、環(huán)境條件等各項(xiàng)條件均良好。利用現(xiàn)有技術(shù)條件預(yù)計(jì)完全可以達(dá)到該軟件的功能目標(biāo)。時(shí)間安排相對比較充裕,預(yù)計(jì)完成沒有問題。

由以上分析可以知道:本設(shè)計(jì)是具有技術(shù)可行性的。

3.1.2?經(jīng)濟(jì)可行性

本設(shè)計(jì)采用的開發(fā)軟件都是開源的,不需用額外花費(fèi)費(fèi)用,這樣削減很多的精力和資源,起到減少成本的作用,因此在經(jīng)濟(jì)上具有可行性。

由以上分析可以知道:本設(shè)計(jì)具有經(jīng)濟(jì)的可行性。

3.1.3?社會可行性

本設(shè)計(jì)的社會可行性主要需要從法律因素、用戶使用可行性這兩方面進(jìn)行研究。

1.法律因素

本設(shè)計(jì)是根據(jù)80、90的青年人旅行的實(shí)際情況開發(fā)研制的,是通過大量的調(diào)研得出的,系統(tǒng)的軟件設(shè)計(jì)是在獨(dú)立的環(huán)境下完成的,無可供抄襲的軟件產(chǎn)品。

2.用戶使用可行性

本設(shè)計(jì)對用戶的要求,除了需要具備移動設(shè)備以及第三方賬號外,并不需要特別的技術(shù)能力。使用系統(tǒng)的管理員,需要具備對java語言及Android開發(fā)環(huán)境的使用能力,在投入使用前,無需對操作系統(tǒng)的人員進(jìn)行培訓(xùn)。這樣減少了投入成本簡化了操作環(huán)節(jié)。

由以上分析可以知道:本設(shè)計(jì)完全具有社會的可行性。

3.2?功能需求分析

Android系統(tǒng)目前在市場上占有很大的份額,從2010前Android就已經(jīng)呈現(xiàn)出很強(qiáng)勁的發(fā)展勢頭,而且到目前為止,還處于不斷的上升階段。無論你走在大街上、校園里、地鐵上亦或是公交上,總能看到人們拿著智能手機(jī)專心致志的做自己的事情,而且不難發(fā)現(xiàn),絕大多數(shù)都是Android手機(jī),人們低頭聚精會神的玩游戲、看小說、刷刷微博等等。手機(jī)中安裝的各種App可以豐富并且滿足人們對業(yè)余生活的要求以及期望,其中的游戲娛樂、在線購物也是極大的刺激著整個社會的消費(fèi)水平。隨著時(shí)代的不斷發(fā)展,兼娛樂與通信功能的手機(jī)越發(fā)的流行,成為人們的一種新的追求。因而,這就更進(jìn)一步的促進(jìn)激發(fā)著手機(jī)軟件App研發(fā)人員的熱情與積極性。

綜上,本設(shè)計(jì)是為了實(shí)現(xiàn)一個方便用戶出行,并可以推薦旅游景點(diǎn)的目標(biāo)。用戶可以通過瀏覽驢友們在野外徒步旅行是的場景,全方位的了解自己想要去的景點(diǎn)。通過展示的信息,用戶可以方便的了解一個景點(diǎn)的人文特色,最近是否有活動,是否擁有優(yōu)惠價(jià),以及根據(jù)時(shí)間分類,可以準(zhǔn)確的推薦最近一段時(shí)間的旅游團(tuán)動向,并附有旅游團(tuán)的聯(lián)系方式,方便用戶直接用電話進(jìn)行咨詢,從而來確定是否參加本次活動;并且在此基礎(chǔ)上,根據(jù)數(shù)據(jù)源的數(shù)據(jù)結(jié)構(gòu)以及字段分析,把旅游的信息按地點(diǎn)進(jìn)行一些分類,每個城市的旅游信息就可以直觀的展現(xiàn)在用戶的面前,并且將旅游的類型進(jìn)行了匯總,冒險(xiǎn)類、休閑類、娛樂類等豐富的信息以供用戶選擇,此外也考慮到了用戶的經(jīng)濟(jì)承受能力,還實(shí)現(xiàn)了根據(jù)本次旅游的價(jià)格信息進(jìn)行進(jìn)一步的整合,可以讓用戶更加直觀并且很快的找見適合自己經(jīng)濟(jì)承受能力的旅游景點(diǎn)。當(dāng)然,光有這些信息是遠(yuǎn)遠(yuǎn)不夠的,用戶之間最好能夠進(jìn)行互動,互相交流旅游心得,欣賞了解對方去過的地方,還可以進(jìn)行點(diǎn)贊,要想實(shí)現(xiàn)這個功能,當(dāng)然是離不開第三方登陸的,微博、QQ可以任意選擇,因而就要求用戶必須要擁有一個屬于自己的第三方的賬號,在登陸成功后可以對個人信息進(jìn)行查看。

3.3?特性需求分析

一個較好的軟件應(yīng)該具有以下特性:

1、易操作和功能簡單明確。一個好的旅游導(dǎo)航系統(tǒng)應(yīng)該功能明確,用戶可以很快的熟悉使用流程,而不是看到界面不知道應(yīng)該如何的操作,即操作要簡單,界面友好易懂。

2、軟件功能流暢。軟件運(yùn)行時(shí)候不會發(fā)生崩潰和卡頓等問題,整個界面操作起來快捷流暢。

3、軟件易維護(hù)性。系統(tǒng)各個設(shè)計(jì)模塊明確,核心代碼要有必要的注釋,方便軟件的后期維護(hù)。

?

?


4 ?概要設(shè)計(jì)

概要設(shè)計(jì)是軟件開發(fā)周期過程中最重要的部分之一,具有極強(qiáng)的指導(dǎo)性,是最為重要的技術(shù)型文檔。

本設(shè)計(jì)主要是應(yīng)用于整個80、90后的旅游管理,所以對于實(shí)際中不同愛好的用戶,在本設(shè)計(jì)中基本都有著對應(yīng)其不同的頁面,即雖然不同的用戶擁有不同的功能,但是互相之間是有聯(lián)系的,不可獨(dú)立,從而體現(xiàn)了該軟件的完整性。

通過對旅游大巷系統(tǒng)的需求分析,了解了系統(tǒng)的總體功能結(jié)構(gòu)和模塊,以及各個模塊要實(shí)現(xiàn)什么功能,以下介紹了系統(tǒng)的總體功能模塊和系統(tǒng)總體架構(gòu)。

4.1?系統(tǒng)總體功能結(jié)構(gòu)

通過對旅游導(dǎo)航的需求分析,了解了本系統(tǒng)的基本邏輯結(jié)構(gòu)和功能。本系統(tǒng)實(shí)現(xiàn)了4個功能模塊,分別是活動、游記、導(dǎo)航、我的四部分。系統(tǒng)功能模塊圖如圖4-1所示。

?

圖4-1系統(tǒng)設(shè)計(jì)圖

4.2?系統(tǒng)總體架構(gòu)

旅游導(dǎo)航的設(shè)計(jì)和實(shí)現(xiàn)的工作模式是客戶-服務(wù)器模式。服務(wù)端在服務(wù)器上運(yùn)行,服務(wù)端是各個景點(diǎn)的展示平臺,本文中設(shè)計(jì)的旅游導(dǎo)航APP則屬于客戶端, 是基于Android手機(jī)平臺的,使用了徒步去旅行tubu.ibuzhai.com的api接口,以及百度地圖SDK。

在實(shí)現(xiàn)本設(shè)計(jì)的過程中,我主要是使用服務(wù)、 網(wǎng)絡(luò)和客戶三部分構(gòu)成, 其中服務(wù)器由請求數(shù)據(jù)的服務(wù)器和中間服務(wù)器構(gòu)成, 網(wǎng)絡(luò)主要有Internet、 3G/WLAN構(gòu)成。詳細(xì)了解徒步去旅行和百度地圖的查詢接口, 并獲得授權(quán)訪問。另一方面, 必須很好的設(shè)計(jì)客戶軟件和中間服務(wù)器間的訪問接口, 此外, 在客戶軟件在提供的用戶使用時(shí), 我們必須建立好中間服務(wù)器。目前考慮到實(shí)際需要, 中間的服務(wù)器沒有自己設(shè)計(jì), 選擇了徒步去旅行和百度地圖來實(shí)現(xiàn)我們的系統(tǒng)。

?


5 ?詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)

5.1?系統(tǒng)總體功能設(shè)計(jì)

5.1.1?服務(wù)器端說明

服務(wù)器端是負(fù)責(zé)數(shù)據(jù)的獲取和對外提供接口的,服務(wù)器端的數(shù)據(jù)是會定時(shí)進(jìn)行更新的,同時(shí)也會對獲取的數(shù)據(jù)進(jìn)行簡單的分類與整合。例如:在空間里評論別人消息的具體過程為:服務(wù)器端提供評論接口,讓用戶可以進(jìn)行評論,客戶端將用戶的評論信息進(jìn)行提交,同時(shí)會提醒用戶是否已提交成功。而服務(wù)器端接收用戶的提交請求后,獲取用戶的評論信息,同時(shí)又對外提供一個顯示不同用戶評論信息的接口。然后客戶端進(jìn)行刷新,這樣用戶便可看到自己以及其他人的評論信息內(nèi)容。

除此之外,由于安卓的智能手機(jī)型號較多又十分的繁雜。所以,安卓應(yīng)用的屏幕適配一直是一個較為頭疼的問題。服務(wù)器端進(jìn)行配合是十分必要的??蛻舳丝梢垣@取不同手機(jī)的屏幕尺寸和分辨率,并將這些信息提交到服務(wù)器端,服務(wù)器端會根據(jù)不同型號手機(jī)不同的分辨率信息,并且向客戶端返回不同大小不同分辨率的圖片,進(jìn)行屏幕的自適應(yīng)。

5.1.2 客戶端說明

客戶端的主要工作是對數(shù)據(jù)進(jìn)行處理與分類,然后進(jìn)行信息的展示,可以讓用戶直觀的查看各種服務(wù)。服務(wù)器端雖然對整體數(shù)據(jù)有一定的分類和歸納,但那僅僅是相對于計(jì)算機(jī)而言(根據(jù)字段或者關(guān)鍵字進(jìn)行的分類),客戶端的靈魂是有良好的用戶體驗(yàn),因而服務(wù)器端的數(shù)據(jù)分類是遠(yuǎn)遠(yuǎn)不能滿足實(shí)際用戶操作的需求的,而這些數(shù)據(jù)的處理,就是在客戶端進(jìn)行的。

用戶不但可以查看當(dāng)前的旅游信息,在游記模塊中,專門為用戶做了一個信息的篩選和推薦功能的推薦小組,進(jìn)入這個推薦便是全國各地中熱門的旅游景點(diǎn),包括對這些景點(diǎn)的詳細(xì)介紹,當(dāng)然還會推薦適合的人群類型,讓真正的愛好者找到自己真正想要去的地方,領(lǐng)略每個地方的美麗。

5.2 系統(tǒng)的實(shí)現(xiàn)

運(yùn)行本設(shè)計(jì),首先你會進(jìn)入到主頁面:

本設(shè)計(jì)大致分為4個模塊:活動模塊、游記模塊、導(dǎo)航模塊、我的模塊。每個模塊各有自己的特點(diǎn)。

?

?

圖5-1整體界面圖

5.2.1 活動模塊

相比即將介紹到的推薦模塊這個以游客信息為主的模塊,活動模塊則更多是官方發(fā)布的信息,信息的分類更多而且更加全面?;顒幽K可以分為兩個層次:第一個層次為官方分類的信息,有八種分類,分別為全部、周末活動、長線活動、攝影、入門、進(jìn)階、雪山、培訓(xùn)這八項(xiàng),各種包含有不同特色的旅游以及時(shí)間段的區(qū)分,目的是更方便用戶的出行。第二個層次則是具體的信息,提供的參考字段主要有:景點(diǎn)信息的簡要描述description、所屬的類型type、具體的位置信息place、出發(fā)的時(shí)間starttime、行程的天數(shù)duration、出行的費(fèi)用price、所屬的發(fā)布單位club、景點(diǎn)的插圖picture、是否屬于熱門景點(diǎn)ishot、是否處于特惠時(shí)間段內(nèi)islow等,這個層次是對景點(diǎn)的直觀展示,以便用戶對景點(diǎn)了解更加深刻。

?

圖5-2活動模塊圖

5.2.2 游記模塊

從名字就可以知道,游記模塊側(cè)重于介紹各種出行信息,這些數(shù)據(jù)信息都是進(jìn)行分類羅列出來的,也是最近一段時(shí)間的信息,在游記這個模塊中,又詳細(xì)的分為直播和推薦兩個模塊,以下是這兩個小模塊的單獨(dú)介紹:

5.2.2.1 推薦模塊

在推薦模塊中,主要包含這幾個字段:景點(diǎn)的簡要描述description,旅游的出發(fā)時(shí)間starttime,總共花費(fèi)的時(shí)間duration,圖文的發(fā)表人user,用戶設(shè)置的個人頭像head,點(diǎn)贊的數(shù)量number,評論的數(shù)量comments,被查看的人次people,景點(diǎn)的圖片pictures,此處景點(diǎn)是否處于熱門ishot,以上字段大致的介紹了景點(diǎn)的基本信息,也滿足了用戶了解景點(diǎn)信息的基本需求,在用戶感興趣時(shí)可以進(jìn)一步查看其詳細(xì):

?

?

圖5-3推薦

?

圖5-4推薦詳圖

在推薦的詳細(xì)信息內(nèi),除了包含以上字段信息外,還記錄了用戶每天的出行計(jì)劃,以及當(dāng)前游玩的心得等,你可以進(jìn)行評論和點(diǎn)贊。

5.2.2.2 直播模塊

直播模塊是最近一段時(shí)間內(nèi)的出行信息,一周前,各個月前等等都有可能,直播則是相對于其而進(jìn)行設(shè)計(jì)的,它是用戶出行的實(shí)時(shí)信息,也許就是此時(shí)此刻的游玩信息,它的時(shí)間跨度只有幾天,一半是不會超過一周。

?

?

圖5-5直播模塊圖

?

在此模塊中,包含的字段信息有:用戶名name,用戶頭像head,更新的圖片數(shù)量picturenumber,更新的時(shí)間updatetime,更新的圖片pictures,更新的地點(diǎn)place,更新狀態(tài)的描述description等,由于用戶主要針對80、90的年齡,所以這種設(shè)計(jì)是基于比較熟悉的QQ空間模式的,目的是為了用戶之間良好的互動交流能力。

?

?

圖5-6直播詳情圖

直播詳情中,側(cè)重于圖片的展示,你從中可以看出,這些圖片完全是從一個游客的角度拍攝的,更具備真實(shí)性,將此信息進(jìn)行展示的目的是為了防止某些景點(diǎn)用虛假的景點(diǎn)圖片將游騙至其景點(diǎn),這樣的話游客行至此處時(shí)完全是和圖片信息是相符的。

5.2.3 導(dǎo)航模塊

導(dǎo)航模塊主要是用于外出旅行時(shí)起導(dǎo)航作用的。由于百度地圖是開源的并且有例子可以參考,所以在這個模塊,就直接在我的Android項(xiàng)目中調(diào)用百度地圖,來實(shí)現(xiàn)定位以及導(dǎo)航的功能。

百度地圖 的Android SDK是一套基于Android 2.1及以上版本設(shè)備的應(yīng)用程序接口。在運(yùn)用的過程中該套 SDK開發(fā)適用于Android系統(tǒng)移動設(shè)備的地圖應(yīng)用。通過調(diào)用地圖SDK接口,使用者就可以很順利的調(diào)用百度地圖服務(wù)和數(shù)據(jù),構(gòu)建功能豐富、交互性強(qiáng)的LBS(地圖類)應(yīng)用程序。百度地圖Android SDK提供的所有服務(wù)是免費(fèi)的,接口使用無次數(shù)限制。所以如果想要使用它,只需申請密鑰(key)后,即可使用了。

?

圖5-7定位 ?????????????????????????????圖5-8目的地輸入圖

?

圖5-9導(dǎo)航頁面圖

5.2.4 我的模塊

我的模塊主要是個人信息的設(shè)置,這個主要是涉及到了第三方登陸,而所謂的第三方登陸,就是借助于國內(nèi)國外擁有得到龐大用戶量的平臺,如Facebook、騰訊QQ、微博、人人、微信等等的平臺。實(shí)現(xiàn)方式主要是借助于第三方的shareSDK,然后根據(jù)接口文檔,下載完SDK后,即可以實(shí)現(xiàn)第三方平臺的登陸操作。具體的登陸界面效果圖如下:

?

圖5-10用戶登錄圖

在當(dāng)游客以自己的賬號成功的登陸以后,登陸的界面就會顯示游客在第三方平臺上的游客昵稱,以及游客的頭像,還有粉絲和關(guān)注的信息則是使用本APP上用戶之間的互粉與關(guān)注,在通知欄里信息是用戶在瀏覽景點(diǎn)時(shí)與其他用戶交流信息,或者預(yù)定了某個景點(diǎn)的信息。路線欄里包括用戶自己在出行時(shí)對路線進(jìn)行的標(biāo)記,包括去過的地方和想去的地方?;顒有畔⑹怯脩粼诒続PP上預(yù)定過的景點(diǎn)信息,以及參加過什么樣的團(tuán)體活動等等。點(diǎn)贊信息欄則是匯總用戶自己對看到的其他用戶所發(fā)布的游記或者圖片點(diǎn)贊后的消息統(tǒng)計(jì)集合。

?

圖5-11用戶成功登陸圖

綜上所述,所有本設(shè)計(jì)上的功能點(diǎn)就基本介紹完畢了,實(shí)現(xiàn)的初衷是為了方便用戶的使用。所以,本設(shè)計(jì)的側(cè)重點(diǎn)在于信息的分類與展示,用戶之間的交流,咨詢活動的組織者以及對特定地點(diǎn)的查詢導(dǎo)航的功能等。

5.3 實(shí)現(xiàn)的技術(shù)點(diǎn)

5.3.1?界面布局的實(shí)現(xiàn)

首先,進(jìn)入程序的首頁為一個activity,這個activity整體上是一個垂直的LinearLayout(線性布局),在這個布局中又劃分為上下兩個布局,上面布局用于承載活動、游記、導(dǎo)航、我的這四個模塊的fragment,activity的下面放置了一個radiogroup組,在radiogroup組里放置了四個radiobutton,這四個button分別對應(yīng)活動、游記、導(dǎo)航、我的這四個信息。

????<LinearLayout

????????android:id="@+id/ll_main_layout"

????????android:layout_width="match_parent"

????????android:layout_height="match_parent"

????????android:gravity="bottom"

????????android:orientation="vertical" >

????????<FrameLayout

????????????android:id="@+id/fragments_container"

????????????android:layout_width="match_parent"

????????????android:layout_height="0dp"

????????????android:layout_weight="1" >

????????</FrameLayout>

????????<RadioGroup

????????????android:id="@+id/rg_bottom"

????????????android:layout_width="match_parent"

????????????android:layout_height="wrap_content"

????????????android:background="#f6f5ec"

????????????android:gravity="center"

????????????android:orientation="horizontal" >

????????????<RadioButton

????????????????android:id="@+id/rb_onlive"

????????????????style="@style/bottom_five_button"

????????????????android:drawableTop="@drawable/bottom_activity"

????????????????android:text="活動" />

????????????<RadioButton

????????????????android:id="@+id/rb_recommend"

????????????????style="@style/bottom_five_button"

????????????????android:checked="true"

????????????????android:drawableTop="@drawable/bottom_travel"

????????????????android:text="游記" />

????????????<RadioButton

????????????????android:id="@+id/radioButton3"

????????????????style="@style/bottom_five_button"

????????????????android:drawableTop="@drawable/bottom_route"

????????????????android:text="導(dǎo)航" />

????????????<RadioButton

????????????????android:id="@+id/radioButton4"

????????????????style="@style/bottom_five_button"

????????????????android:drawableTop="@drawable/bottom_mine"

????????????????android:text="我的" />

????????</RadioGroup>

????</LinearLayout>

????<LinearLayout

????????android:id="@+id/ll_cover"

????????android:layout_width="match_parent"

????????android:layout_height="match_parent"

????????android:visibility="gone"

????????android:orientation="vertical"

????????android:background="#a0000000" >

</LinearLayout>

5.3.1.1 活動模塊布局的實(shí)現(xiàn)

活動模塊的一級界面大致可以分為三個部分。

第一部分是水平的LinearLayout:最左邊是一個ImageView,里面放置一個圖片信息,然后是一個地點(diǎn)的分類信息,最后邊放置一個ImageButton,用于搜索的點(diǎn)擊按鈕。

第二個部分是分類信息的展示,采用的是Android中的GridView控件,它可以指定每行放置圖片的個數(shù),以及橫行縱行圖片的間距。

第三部分是一個ListView,它的每個Item元素復(fù)用同一個布局,他可以加載一批具有不同內(nèi)容但有相同的布局的元素,在每個布局中主要采用的是線性布局,這種布局的優(yōu)點(diǎn)在于不容易變形,對與不同屏幕可以進(jìn)行很好的適配。

5.3.1.2 游記模塊布局的實(shí)現(xiàn)

在游記模塊中,分為三個布局,上面的LinearLayout是顯示當(dāng)前處的模塊,第二部分又是一個RadioGroup組,里面放置兩個RadioButton,分別顯示直播、推薦這兩個子模塊,以保證當(dāng)前只能選中一個子模塊;第三部分是一個可以左右滑動的ViewPager,在Viewpager中又放置了兩個fragment,在兩個子fragment中分別放置了一個ListView,用于承載顯示的具體信息,直播和推薦兩個子模塊除了每個Item的布局不同外,其余布局都基本相同。

5.3.1.3 導(dǎo)航模塊布局的實(shí)現(xiàn)

在導(dǎo)航模塊的布局過程中,既有自己位置定位的布局,也有搜索目的地的頁面布局。在編寫定位頁面的代碼過程中,當(dāng)然要先申請一個百度地圖API,下載過程是比較順利的。其中最主要的申請百度的API Key,這就要求要用本機(jī)的Eclipse的SHA1指紋以及自己項(xiàng)目的包名,當(dāng)然由于你的Eclipse中顯示的指紋肯定和我的是不一樣的,所以否則申請到的key也沒有用。當(dāng)然在編碼之前還是需要先將百度地圖Android版的SDK準(zhǔn)備好。Libs目錄是專門用來存放第三方j(luò)ar包的地方,而armeabi目錄則是專門用來存放壓縮包中so文件的地方。So文件是用c或c++語言進(jìn)行編寫,然后再用NDK編譯出來的。而libBaiduMapSDK_v2_3_1.so這個文件已經(jīng)由百度幫助我們編譯好了,因此直接放到armeabi目錄就可以使用了。然后就可以開始編寫這個頁面了。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

????android:layout_width="match_parent"

????android:layout_height="match_parent"

????android:orientation="vertical" >

????<LinearLayout

????????android:layout_width="match_parent"

????????android:layout_height="wrap_content"

????????android:background="#33B5E5" >

????????<ImageView

????????????android:id="@+id/iv_activity_logo"

????????????android:layout_width="wrap_content"

????????????android:layout_height="wrap_content"

????????????android:padding="8dp"

????????????android:src="@drawable/icon_titlebar" />

????????<TextView

????????????android:id="@+id/tv_activity_country"

????????????android:layout_width="wrap_content"

????????????android:layout_height="match_parent"

????????????android:gravity="center"

????????????android:padding="8dp"

????????????android:text="導(dǎo)航"

????????????android:textColor="#fffffb"

????????????android:textSize="20sp" />

????</LinearLayout>

<LinearLayout

????android:orientation="vertical" android:layout_width="match_parent"

????android:layout_height="match_parent">

????<LinearLayout

????????android:layout_width="match_parent"

????????android:layout_height="wrap_content"

????????android:orientation="horizontal">

????????<Button

????????????android:id="@+id/locate"

????????????android:text="定位"

????????????android:layout_width="wrap_content"

????????????android:layout_height="wrap_content"

????????????android:layout_weight="1"/>

????????<Button

????????????android:id="@+id/navi"

????????????android:text="導(dǎo)航"

????????????android:layout_width="wrap_content"

????????????android:layout_height="wrap_content"

????????????android:layout_weight="1"/>

????</LinearLayout>

????<com.baidu.mapapi.map.MapView

????????android:id="@+id/bmapView"

????????android:layout_width="fill_parent"

????????android:layout_height="fill_parent"

????????android:clickable="true" />

</LinearLayout>

</LinearLayout>

5.3.1.4 我的模塊布局的實(shí)現(xiàn)

?我的模塊主要是分為兩個布局,上面是一個linearlayout,里面放置的一個imageView,用戶顯示用戶未登錄是的頭像圖片,下面的一個linearlayout,里面則是放置的兩個textView,用于實(shí)現(xiàn)第三方登陸。

這樣頁面布局就基本介紹完畢了。

5.3.2 代碼中所用到的技術(shù)

在實(shí)際實(shí)現(xiàn)各項(xiàng)功能的過程中,毫無疑問的遇到了很多問題,Android中解決事件之間的沖突尤為重要,而且不同的功能點(diǎn)進(jìn)行組合時(shí)還會遇到很多問題,以下是遇到并解決的技術(shù)點(diǎn)。

5.3.2.1 活動模塊

1.滑動沖突的解決:在活動模塊中用到的Android控件有Viewpager、Gridview、Listview,這三個控件為上中下三個層次的,他們?nèi)齻€要實(shí)現(xiàn)一起聯(lián)動就要在外層套一個Scrollview,即同時(shí)上滑或者同時(shí)下滑,其中Gridview和Listview這兩個控件本身就在數(shù)據(jù)加載過多時(shí)就能滑動,它的父View Scrollview也是可以滑動的,所以會起沖突,具體表現(xiàn)為Gridview和ListView顯示的數(shù)據(jù)不全問題,解決的辦法是重寫Gridview和Listview中的OnMersure()方法,讓其重新計(jì)算下數(shù)據(jù)的高度,便可解決此類沖突。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

public boolean dispatchTouchEvent(MotionEvent ev) {

if (ev.getAction() == MotionEvent.ACTION_MOVE) {

return true;

}

return super.dispatchTouchEvent(ev);

}

}

2.Popupwindow與Listview之間的綁定:在實(shí)現(xiàn)地點(diǎn)的切換時(shí),Listview中的數(shù)據(jù)要跟著地點(diǎn)的不同展示當(dāng)前選中地點(diǎn)的信息,地址欄的展示使用的是Popupwindow,要想實(shí)現(xiàn)這種效果就必須把Popupwindow的點(diǎn)擊事件與Listview進(jìn)行綁定,要實(shí)現(xiàn)的方法時(shí)設(shè)置點(diǎn)擊事件OnClickListener,Android中的點(diǎn)擊事件類似于C語言的接口回調(diào)技術(shù)。

popup1.setBackgroundDrawable(drawables);

popup1.setOutsideTouchable(true);

popup1.setFocusable(true);

llFirst.setOnClickListener(this);

3.不同界面之間的傳值:在活動模塊一級界面與二級界面跳轉(zhuǎn)的過程中涉及到數(shù)據(jù)的傳遞,Android中有一種跳轉(zhuǎn)機(jī)制為Intent,它可以攜帶數(shù)據(jù)信息,具體代碼為:

Intent intent=new Intent(this,MainActivity.class); intent.putExtra(“value”,1);

startActivity(intent);這樣便可以實(shí)現(xiàn)界面與界面之間的跳轉(zhuǎn),并且攜帶跳轉(zhuǎn)時(shí)數(shù)據(jù)信息。

5.3.2.2 游記模塊

1.界面的刷新:在這個模塊中比較重視數(shù)據(jù)的實(shí)時(shí)性,所獲得的數(shù)據(jù)必須要最新的,這就需要對界面的數(shù)據(jù)進(jìn)行刷新,Android在不斷的改進(jìn)發(fā)展過程中已經(jīng)有了很好的刷新控件,但是在這里我仍然使用的是第三方的可刷新庫,PulltoRefresh,它的基本原理也是重寫Android源碼,在刷新時(shí)經(jīng)常遇到的問題是刷新回不去,一直在刷新的情況,經(jīng)過摸索,解決的辦法是在Android中的Handler機(jī)制中執(zhí)行刷新的回調(diào)方法。

public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

// TODO Auto-generated method stub

if (currrentPage <= totalPage) {

ExecutorService service = Executors.newSingleThreadExecutor();

service.execute(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

currrentPage++;

String url = AppConfig.RECOMMENDHEAD + currrentPage

+ AppConfig.RECOMMENDEND;

UpdateData(url);

handler1.sendEmptyMessage(1);

}

});

} else {

Toast.makeText(getActivity(), "已加載全部!", Toast.LENGTH_LONG).show();

}

}

2.Listview每個Item點(diǎn)擊事件的沖突處理:由于Listview每個Item復(fù)用一個布局,在點(diǎn)擊一個按鈕時(shí)會起沖突,解決的辦法是在BaseAdapter適配器中對每個點(diǎn)擊事件進(jìn)行處理。

View vv = getLayoutInflater().inflate(

R.layout.activity_sort_laout_style, null);

sortAdapter = new ArrayAdapter<String>(this,

R.layout.activity_sort_text_style, R.id.tv_activity_sort, sort);

sortList = (ListView) vv.findViewById(R.id.lv_activity_sort_listview);

sortList.setAdapter(sortAdapter);

popup2 = new PopupWindow(vv);

popup2.setWidth(getWindowManager().getDefaultDisplay().getWidth() / 2);

popup2.setHeight(LayoutParams.WRAP_CONTENT);

ColorDrawable drawabless = new ColorDrawable(Color.WHITE);

popup2.setBackgroundDrawable(drawabless);

popup2.setOutsideTouchable(true);

popup2.setFocusable(true);

llSecond.setOnClickListener(this);

5.3.2.3 導(dǎo)航模塊

在我的導(dǎo)航模塊中主要是調(diào)用百度地圖,在導(dǎo)入到項(xiàng)目的過程中,會有一些錯誤,但是通過搜索解決方案,在不斷地嘗試后終于得到解決,找到合理的方式,實(shí)現(xiàn)了導(dǎo)航功能。

???? private void initNavi() {

BNOuterTTSPlayerCallback ttsCallback = null;

BaiduNaviManager.getInstance().init(this, mSDCardPath, APP_FOLDER_NAME, new NaviInitListener() {

@Override

public void onAuthResult(int status, String msg) {

if (0 == status) {

authinfo = "key校驗(yàn)成功!";

Log.i("key校驗(yàn)","success");

} else {

authinfo = "key校驗(yàn)失敗, " + msg;

}

BNDemoMainActivity.this.runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(BNDemoMainActivity.this, authinfo, Toast.LENGTH_LONG).show();

}

});

}

public void initSuccess() {

Toast.makeText(BNDemoMainActivity.this, "百度導(dǎo)航引擎初始化成功", Toast.LENGTH_SHORT).show();

Log.i("初始化","success");

initSetting();

}

public void initStart() {

Toast.makeText(BNDemoMainActivity.this, "百度導(dǎo)航引擎初始化開始", Toast.LENGTH_SHORT).show();

}

public void initFailed() {

Toast.makeText(BNDemoMainActivity.this, "百度導(dǎo)航引擎初始化失敗", Toast.LENGTH_SHORT).show();

}

}, ?null, ttsHandler, null);

}

5.3.2.4 我的模塊

在我的模塊中的關(guān)鍵技術(shù)就是第三方登陸了,第三方登陸時(shí)依賴于第三方提供的sharesdk,登陸時(shí)要進(jìn)行授權(quán)的處理,在用戶登陸成功以后要獲取用戶的賬戶信息,如頭像、昵稱等個人設(shè)置信息,然后將這些信息展現(xiàn)到APP界面中。

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.share_qq:

plat = ShareSDK.getPlatform(acticity, QQ.NAME);

plat.setPlatformActionListener(this);

if (plat == null) {

return;

}

???plat.SSOSetting(true);

plat.showUser(null);

break;

case R.id.share_sina:

plat = ShareSDK.getPlatform(acticity, SinaWeibo.NAME);

plat.setPlatformActionListener(this);

if (plat == null) {

return;

}

plat.SSOSetting(true);

plat.showUser(null);

break;

case R.id.btn_login_notify:

Intent intent = new Intent(acticity, NotifyActivity.class);

startActivity(intent);

break;

case R.id.iv_minefragment_setting:

Intent intent1 = new Intent(acticity, SettingActivity.class);

startActivity(intent1);

break;

default:

break;

}

}

以上只是APP中一級界面要用的部分技術(shù),此外還要處理數(shù)據(jù)量過大時(shí)造成的OOM(內(nèi)存溢出),數(shù)據(jù)的分類算法,各種點(diǎn)擊事件回調(diào)的處理等技術(shù),開發(fā)以上APP使用的第三方框架有:XUtils框架、PulltoRefresh可刷新庫、viewpagerindicatorlibrary等。


6 ?軟件測試

在我們的安卓應(yīng)用軟件開發(fā)的過程中,軟件測試也是極其重要的一環(huán)。大量的測試可以幫我們有效的保證設(shè)計(jì)軟件的質(zhì)量。這個測試的過程就是在條件的控制下對設(shè)計(jì)的各個模塊進(jìn)行預(yù)期結(jié)果的對比,盡可能的用軟件容易出現(xiàn)錯誤的例子進(jìn)行驗(yàn)證,進(jìn)行各種各樣所設(shè)計(jì)軟件可能遇到的情況下的反饋是否正常,測試軟件的健壯性、正確性等。用樸實(shí)的話來講,針對設(shè)計(jì)軟件的測試,實(shí)際上就是找錯。

6.1?軟件測試的重要性

這個模塊是非要重要的,測試必不可少,我們可以從各大IT公司看到,測試崗位是不可或缺的,軟件測試甚至重要性要遠(yuǎn)遠(yuǎn)高于我們程序的編碼階段,我們通過課本的學(xué)習(xí)已經(jīng)知道,軟件測試是有著很重要的地位的,它甚至可能會伴隨整個的軟件生命周期。好的測試環(huán)節(jié),可以幫助我們的設(shè)計(jì)在使用后擁有較好的穩(wěn)定性,同時(shí)在開發(fā)中,越早的發(fā)現(xiàn)錯誤,無疑是耗損越小的。

基于Android的旅游導(dǎo)航APP同樣需要進(jìn)行大量的軟件測試,在每一個模塊,在每一個設(shè)計(jì)階段,模塊的測試,都是必不可少的,系統(tǒng)測試也是關(guān)乎軟件開發(fā)的進(jìn)程。在本APP的開發(fā)過程中,軟件測試的工作實(shí)際上占據(jù)了很大的比例,在測試中發(fā)現(xiàn)自己的問題,然后回頭查找問題,進(jìn)而改正問題。正是因?yàn)橛兄@樣的全面的軟件測試,才讓開發(fā)順利進(jìn)行,也讓我更加深刻的認(rèn)識到測試的重要性。總而言之,這是一項(xiàng)必不可少的工作。

6.2?測試實(shí)例的研究與選擇

在我們大學(xué)的學(xué)習(xí)中,我們知道程序測試的概念,它的方法中主要有白盒方式測試、黑盒方式測試。

白盒測試:顧名思義,白盒測試實(shí)際上就是將我們所要被測試的軟件視為一個可視的白色盒子,一切結(jié)構(gòu)以及邏輯都是可以看到的,因此它也是一種針對結(jié)構(gòu)的一種測試。這樣的測試,主要要達(dá)到的預(yù)期結(jié)果是判斷邏輯是否正確,結(jié)構(gòu)是否合理。需要提出的是,這種測試方法要對源碼進(jìn)行十分必要的全部覆蓋,要發(fā)現(xiàn)所有可能存在的錯誤,具體主要有兩種覆蓋方法:邏輯覆蓋法,路徑覆蓋法。

黑盒測試:也就是我們針對被測試程序的功能進(jìn)行測試。不去關(guān)心它的實(shí)現(xiàn),不去關(guān)心它的邏輯、結(jié)構(gòu),只重視結(jié)果,只考慮我們預(yù)期的功能是否實(shí)現(xiàn),判斷規(guī)格說明書中的內(nèi)容是否被合理實(shí)現(xiàn)。等價(jià)分類的方法,因果圖法,利用邊界值進(jìn)行分析方法等都是黑盒測試的常用方法。

基于Android的旅游導(dǎo)航App軟件測試采用白盒測試、黑盒測試相結(jié)合的方法,綜合了二者各自優(yōu)點(diǎn),在測試當(dāng)中遵循了“盡早地和不斷進(jìn)行測試”,“確保了測試用例有效、完整”原則。通過測試達(dá)到以下測試目的:

1.功能檢查:查閱功能是否全部完善。

2.接口檢查:檢查做好的接口是否可以正常使用。

3.?dāng)?shù)據(jù)檢查:數(shù)據(jù)結(jié)構(gòu)是否正確,數(shù)據(jù)文件是否可以正常訪問。

4.性能檢查:檢查性能需求能否得到滿足。

5.初始化、終止檢查:檢查是否能夠進(jìn)行開始停止。

6.3?系統(tǒng)運(yùn)行情況

進(jìn)行全面的系統(tǒng)測試后,測試結(jié)果都是正常的,本軟件是完全可以正常運(yùn)行的。

以下是運(yùn)行的主要結(jié)果截圖:

?

圖6-1主頁面

本設(shè)計(jì)主要有4個模塊,其中第一部分是活動模塊,詳細(xì)圖如下:

?

圖6-2活動頁面詳細(xì)圖

第二部分是游記模塊,具體可以分為直播和推薦兩個部分:

?

圖6-3直播頁面????????????????????圖6-4推薦頁面

第三部分是導(dǎo)航頁面,具體實(shí)現(xiàn)如下:

??

圖6-5定位頁面?????????????????????????圖6-6輸入目的地

?

圖6-7導(dǎo)航頁面

第四部分為用戶登錄界面,詳細(xì)圖如下:

??

圖6-8用戶登錄界面???????????????????????圖6-9用戶成功登陸界面

6.4?系統(tǒng)評價(jià)

系統(tǒng)評價(jià)就是指,我們對系統(tǒng)的功能、經(jīng)濟(jì)、技術(shù)等方面的客觀評價(jià)。針對本設(shè)計(jì)的評價(jià)如下:

1.系統(tǒng)功能評價(jià)

在開發(fā)完成后,我進(jìn)行了大量的測試運(yùn)行,經(jīng)過驗(yàn)證,基本實(shí)現(xiàn)了原先設(shè)定的功能,可以滿足既定用戶的不同需求,這說明設(shè)計(jì)較為合理。

2.系統(tǒng)技術(shù)評價(jià)

技術(shù)上,我們設(shè)計(jì)的App響應(yīng)速度還比較快,功能基本完善的實(shí)現(xiàn)了,在測試中,長期運(yùn)行也沒有問題,程序的安全性高,實(shí)用性強(qiáng),占用大小適中??梢灶A(yù)見會給用戶提供良好的服務(wù)。

3.系統(tǒng)經(jīng)濟(jì)評價(jià)

開發(fā)過程由自己進(jìn)行,所需要的時(shí)間并不長,開發(fā)周期短,后期維護(hù)費(fèi)用低廉,可以為用戶提供穩(wěn)定安全可靠的服務(wù)。為用戶節(jié)約大量的時(shí)間,節(jié)約旅游愛好者的旅游費(fèi)用。

?

?

?

?

基于Android的旅游導(dǎo)航APP的設(shè)計(jì)與實(shí)現(xiàn)的評論 (共 條)

分享到微博請遵守國家法律
博乐市| 彩票| 保山市| 禹州市| 海南省| 太白县| 辉南县| 万源市| 宜兰县| 宁德市| 鄂托克旗| 禹州市| 错那县| 化隆| 桃园县| 晋宁县| 天水市| 固安县| 繁昌县| 建阳市| 上栗县| 漳浦县| 崇仁县| 平阳县| 偏关县| 静海县| 巴林右旗| 中阳县| 唐海县| 娱乐| 区。| 镇坪县| 县级市| 湖州市| 临沂市| 睢宁县| 宣武区| 清水县| 定襄县| 海盐县| 株洲市|