基于群智感知的校園信息系統(tǒng)研究與設(shè)計和實現(xiàn) 計算機科學(xué)與技術(shù)專業(yè)_第1頁
基于群智感知的校園信息系統(tǒng)研究與設(shè)計和實現(xiàn) 計算機科學(xué)與技術(shù)專業(yè)_第2頁
基于群智感知的校園信息系統(tǒng)研究與設(shè)計和實現(xiàn) 計算機科學(xué)與技術(shù)專業(yè)_第3頁
基于群智感知的校園信息系統(tǒng)研究與設(shè)計和實現(xiàn) 計算機科學(xué)與技術(shù)專業(yè)_第4頁
基于群智感知的校園信息系統(tǒng)研究與設(shè)計和實現(xiàn) 計算機科學(xué)與技術(shù)專業(yè)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

目錄前言 [13]進行系統(tǒng)的設(shè)計,系統(tǒng)中的數(shù)據(jù)集中存儲在服務(wù)器端,服務(wù)器采用MySQL數(shù)據(jù)庫負責(zé)數(shù)據(jù)存取以及相應(yīng)的業(yè)務(wù)處理工作,并為客戶端提供對應(yīng)的接口返回JSON數(shù)據(jù)。移動客戶端實現(xiàn)系統(tǒng)的各個功能模塊,包括用戶交互UI設(shè)計,應(yīng)用邏輯設(shè)計,訪問服務(wù)器數(shù)據(jù)存取解析等操作,實現(xiàn)用戶注冊登陸、GPS定位以及周邊環(huán)境噪聲監(jiān)測等功能,最后利用獎勵機制提高用戶主動參與活動的積極性??蛻舳死胔ttp協(xié)議訪問服務(wù)器。4.2移動客戶端設(shè)計移動客戶端是應(yīng)用開發(fā)的關(guān)鍵部分,如何開發(fā)一款移動應(yīng)用取決于使用的目標(biāo)群體,我們需要站在用戶的角度去考慮關(guān)注的要點。應(yīng)用設(shè)計中,我們通常以高內(nèi)聚低耦合作為劃分模塊的準(zhǔn)則,低耦合使得代碼在后期更易于修改和維護,高內(nèi)聚則意在模塊之間關(guān)系要清晰明了,這使得代碼在運行時更加安全。另外在完成模塊設(shè)計和功能實現(xiàn)的同時,我們還要考慮良好的用戶交互體驗。移動客戶端的核心架構(gòu)圖如圖4.1所示:圖4.1移動客戶端核心架構(gòu)圖4.1中,移動客戶端被分成多個層次:用戶交互層、應(yīng)用層、數(shù)據(jù)存儲層、本地數(shù)據(jù)持久層、網(wǎng)絡(luò)交互層,每一層都有其本職工作并為上層提供服務(wù)。1、用戶交互層:該層主要負責(zé)完成用戶交互UI界面的設(shè)計,點擊事件的接受和響應(yīng)。2、應(yīng)用層:該層涵蓋了移動客戶端的各個模塊功能:(1)登陸\注冊模塊:主要負責(zé)用戶的注冊、登陸、密碼找回等功能。(2)業(yè)務(wù)邏輯模塊:負責(zé)完成移動客戶端主要輔助功能的實現(xiàn),包括百度地圖API接口實現(xiàn)、定位功能、噪聲監(jiān)測和數(shù)值轉(zhuǎn)換功能實現(xiàn)。(3)網(wǎng)絡(luò)編程模塊:由于本次設(shè)計使用了xUtils3開發(fā)框架,該開發(fā)框架的網(wǎng)絡(luò)模塊大大方便了在實際開發(fā)中的網(wǎng)絡(luò)模塊的開發(fā)。(4)傳感器模塊:主要負責(zé)處理移動設(shè)備傳感器檢測收集的感知數(shù)據(jù),如GPS定位信息、噪聲監(jiān)測信息等。3、數(shù)據(jù)存取層:數(shù)據(jù)存取層主要負責(zé)對本地數(shù)據(jù)的存取,包括讀取用戶登陸、注冊信息,對定位位置信息、噪聲監(jiān)測數(shù)值等進行存取操作。4、本地數(shù)據(jù)持久層:該層主要負責(zé)本地數(shù)據(jù)的持久化存儲,分為硬盤持久化存儲和內(nèi)存持久化存儲。5、網(wǎng)絡(luò)交互層:該層負責(zé)完成移動客戶端通過網(wǎng)絡(luò)請求訪問服務(wù)器端的API接口,接受和響應(yīng)網(wǎng)絡(luò)數(shù)據(jù)。對服務(wù)器響應(yīng)的json數(shù)據(jù)通過Gson進行解析獲得我們需要的數(shù)據(jù)。4.3服務(wù)器端設(shè)計4.3.1服務(wù)器端概要設(shè)計服務(wù)器端主要負責(zé)實現(xiàn)后臺業(yè)務(wù)邏輯和系統(tǒng)的數(shù)據(jù)存儲操作,并為客戶端提供接口服務(wù)。服務(wù)器端核心架構(gòu)圖如圖4.2所示:圖4.2服務(wù)器端核心架構(gòu)圖如圖4.2所示:服務(wù)器端分成了3個部分,業(yè)務(wù)邏輯層根據(jù)對應(yīng)的業(yè)務(wù)請求進行服務(wù)器的訪問,交互接口層則是對業(yè)務(wù)邏輯層分別進行封裝后為客戶端提供對應(yīng)的API接口服務(wù)。業(yè)務(wù)邏輯層根據(jù)具體的業(yè)務(wù)模塊分為:用戶登陸\注冊模塊、定位信息存取模塊、噪聲監(jiān)測值存取模塊等服務(wù)器功能以及其與數(shù)據(jù)庫的交互。4.3.2數(shù)據(jù)庫設(shè)計本節(jié)簡單介紹了服務(wù)器端數(shù)據(jù)庫中重要的表結(jié)構(gòu)(1)用戶表loginuser字段類型說明Idint(10)用戶標(biāo)志,主鍵,自增user_loginnamevarchar(20)用戶名user_nicknamevarchar(40)用戶昵稱user_pwdvarchar(20)用戶密碼user_avatarurlvarchar(40)用戶頭像urluser_gendervarchar(20)用戶性別user_telvarchar(40)用戶聯(lián)系方式user_participationdecimal(10)用戶參與度user_rankint(20)用戶分?jǐn)?shù)值user_createtimevarchar(255)用戶注冊時間(2)噪聲定位數(shù)值表positioninfo字段類型說明Idint(10)信息標(biāo)識,主鍵,自增user_loginnamevarchar(20)用戶名noise_valuevarchar(255)噪聲值LatitudeDouble定位經(jīng)度LongitudeDouble定位緯度4.3.3Ngrok內(nèi)網(wǎng)映射一款應(yīng)用的各類數(shù)據(jù)是存儲在公共服務(wù)器上,為了給任意用戶提供數(shù)據(jù)存取服務(wù),服務(wù)器需要對外開放給用戶進行訪問,所以在這里使用到了Ngrok內(nèi)網(wǎng)映射服務(wù)。Ngrok是當(dāng)下非常流行的一項反向代理服務(wù),用于進行內(nèi)網(wǎng)穿透,通過在公共的端點和本地運行的Web服務(wù)器之間建立一個安全的通道。這樣我們就可以將本地的Web服務(wù)器部署在外網(wǎng)上供所有用戶進行使用和調(diào)試等操作,本服務(wù)支持80端口以及自定義tcp端口轉(zhuǎn)發(fā)等。4.4客戶端與服務(wù)器端交互設(shè)計本章的前三節(jié)中介紹了本系統(tǒng)的整體架構(gòu),并對客戶端和服務(wù)器端進行了詳細設(shè)計??蛻舳朔矫孢M行了詳細設(shè)計,包括UI設(shè)計和交互頁面設(shè)計等??蛻舳嗽L問服務(wù)器是通過網(wǎng)絡(luò)請求模塊進行連接,本次設(shè)計中使用了xUtils3開發(fā)框架,大大方便了在應(yīng)用設(shè)計中網(wǎng)絡(luò)模塊的開發(fā)??蛻舳送ㄟ^xUtils3集成的http網(wǎng)絡(luò)傳輸協(xié)議,主要是以get的方式為主??蛻舳烁鶕?jù)對應(yīng)的業(yè)務(wù)需求,利用http協(xié)議發(fā)送Resquest請求給后臺服務(wù)器,服務(wù)器接收到請求后處理業(yè)務(wù),同時根據(jù)請求的要求返回一個JSON格式的響應(yīng)數(shù)據(jù)給客戶端,客戶端接收到這個響應(yīng)數(shù)據(jù)后,通過GSON工具對JSON數(shù)據(jù)進行解析成為可識別的數(shù)據(jù)格式,并反饋給用戶。4.5本章小結(jié)本章的主要工作為:1、考慮采用C/S架構(gòu)對系統(tǒng)進行整體的架構(gòu)設(shè)計。2、完成客戶端架構(gòu)設(shè)計和客戶端交互界面的設(shè)計。3、完成服務(wù)器端架構(gòu)設(shè)計,設(shè)計服務(wù)器端數(shù)據(jù)庫,將服務(wù)器部署在公網(wǎng)上供用戶使用。4、采用http網(wǎng)絡(luò)傳輸協(xié)議實現(xiàn)客戶端與服務(wù)器端的交互。

第五章系統(tǒng)實現(xiàn)本章在完成前文所述功能設(shè)計的基礎(chǔ)上,完成了模塊功能的具體實現(xiàn),包括客戶端的核心功能實現(xiàn)、服務(wù)器端核心API實現(xiàn)以及服務(wù)器架設(shè)方式的介紹。5.1客戶端核心模塊的實現(xiàn)5.1.1噪聲監(jiān)測定位服務(wù)移動客戶端的噪聲監(jiān)測定位服務(wù)主要集中在百度地圖上進行實現(xiàn),如圖5.1、5.2分別是定位服務(wù)和噪聲分布定位和監(jiān)測圖。圖5.1定位服務(wù)圖圖5.2噪聲分布定位和監(jiān)測圖為了實現(xiàn)如圖5.1和5.2所示的信息,需要實現(xiàn)以下幾點要求:1、在系統(tǒng)中使用百度地圖SDK。(1)申請密鑰如果想要使用百度地圖SDK,先向百度官方申請開發(fā)者密鑰。如圖5.3所示:圖5.3百度地圖密鑰申請(2)下載相關(guān)SDK如圖5.4所示,根據(jù)系統(tǒng)所需要使用到的功能選擇所要下載的安裝包。圖5.4百度地圖開發(fā)資源(3)環(huán)境配置將安裝包導(dǎo)入到AndroidStudio的libs包中如圖5.5所示。圖5.5libs包中文件(4)在項目的AndroidManifest.xml中的application中添加開發(fā)密鑰和默認(rèn)服務(wù)。

android:value="1j7P7Z42qw1657zL10QZibgy1rnW6Yso"

/>

(5)添加項目中所需要的權(quán)限,以下為定位相關(guān)權(quán)限。<!—精確定位權(quán)限

-->

<uses-permission

android:name="android.permission.ACCESS_FINE_LOCATION"

/>

<!—網(wǎng)絡(luò)定位權(quán)限-->

<uses-permission

android:name="android.permission.ACCESS_COARSE_LOCATION"/>

2、在布局文件中添加地圖控件。<com.baidu.mapapi.map.MapView

android:id="@+id/bmapView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:clickable="true"/>

3、定位服務(wù)中,為了在地圖上直觀的顯示出定位信息,需要在定位位置添加相應(yīng)的覆蓋物。ll用于存放自己的經(jīng)緯度坐標(biāo)用于添加覆蓋物等操作。option對象是覆蓋物選型對象,用于設(shè)置覆蓋物的各種屬性。在定位操作結(jié)束后,將isFirstLocate設(shè)置為false。

//用于存放經(jīng)緯度,即自己的坐標(biāo)

LatLng

ll

=

new

LatLng(location.getLatitude(),

location.getLongitude());

/*用于獲取定位經(jīng)緯度*/

/*在自己的位置添加覆蓋物,用于顯示監(jiān)測噪聲位置等信息*/

BitmapDescriptor

bitmap

=

BitmapDescriptorFactory.fromResource(R.drawable.location);

OverlayOptions

option

=

new

MarkerOptions()

.position(ll)

.icon(bitmap)

.zIndex(12)

.draggable(true);

baiduMap.addOverlay(option);

MapStatusUpdate

update

=

MapStatusUpdateFactory.newLatLng(ll);

//將覆蓋物設(shè)為中心點顯示

baiduMap.animateMapStatus(update);

4、本次設(shè)計中,噪聲監(jiān)測功能是通過手機的聲音傳感器來實現(xiàn)的,將麥克風(fēng)收集到的周邊聲音通過對應(yīng)的轉(zhuǎn)化算法轉(zhuǎn)化為分貝值,用于判定周圍聲音強度。AudioRecord類中通過方法getNoiseLevel()方法對聲音進行了收集和數(shù)值轉(zhuǎn)化,轉(zhuǎn)化后的數(shù)值進行返回用于存取。

/*計算噪聲分貝值*/

public

int

getNoiseLevel(){

mAudioRecord

=

new

android.media.AudioRecord(MediaRecorder.AudioSource.MIC,

SAMPLE_RATE_IN_HZ,

AudioFormat.CHANNEL_IN_DEFAULT,

AudioFormat.ENCODING_PCM_16BIT,

BUFFER_SIZE);

if(mAudioRecord

==

null){

Log.e("sound","mAudioRecord初始化失敗");

}

mAudioRecord.startRecording();

short[]

buffer

=

new

short[BUFFER_SIZE];

int

r

=

mAudioRecord.read(buffer,0,BUFFER_SIZE);

long

v

=

0;

for(int

i=0;i<buffer.length;i++){

v+=buffer[i]*buffer[i];

}

double

mean

=

v/(double)r;

double

volumn

=

10

*

Math.log10(mean);

ivolumn

=

(int)

Math.abs(volumn);

mAudioRecord.stop();

mAudioRecord.release();

mAudioRecord

=

null;

return

ivolumn;

}

}

5、為了給用戶更直觀的查看到周邊環(huán)境的噪聲強度,選擇直接將服務(wù)器中的數(shù)據(jù)以定位標(biāo)志的形式顯示在百度地圖上供用戶進行預(yù)覽,用戶只需要點擊覆蓋物,即可顯示點擊位置的噪聲值。(1)從服務(wù)器上獲取所有已知噪聲數(shù)值以及定位的數(shù)據(jù),將其以覆蓋物的形式顯示在百度地圖上。Marker作用是添加自定義標(biāo)識,同時可以為marker添加點擊事件。bundle.putSerializable()自定義bundle傳遞序列化對象數(shù)據(jù),當(dāng)噪聲值傳遞給點擊事件后彈出的布局中。

for(JsonElement

l:jsonArray)

{

VoiceBean

valueBean

=

gson.fromJson(l,

VoiceBean.class);

OverlayOptions

options;

latLng

=

new

LatLng(Double.valueOf(valueBean.getLotitude()),

Double.valueOf(valueBean.getLongitude()));

options

=

new

MarkerOptions()

.position(latLng)

.icon(bitmap)

.zIndex(9)

.draggable(true);

marker

=

(Marker)baiduMap.addOverlay(options);

Bundle

bundle

=

new

Bundle();

bundle.putSerializable("info",valueBean.getNoise()+"db");

marker.setExtraInfo(bundle);

}

initMarkerClickEvent();

(2)為自定義marker添加點擊事件,點擊標(biāo)識后彈出布局顯示當(dāng)前定位的噪聲分貝值。location是新建的TextView布局,用于存放噪聲值。InfoWindow方法是百度地圖提供的創(chuàng)建自定義View方法,參數(shù)分別給自定義布局對象,對象位置和y軸方向上的偏移量。private

void

initMarkerClickEvent(){

baiduMap.setOnMarkerClickListener(new

BaiduMap.OnMarkerClickListener()

{

@Override

public

boolean

onMarkerClick(Marker

marker)

{

String

info

=

(String)marker.getExtraInfo().get("info");

InfoWindow

mInfoWindow;

TextView

location

=

new

TextView(getApplicationContext());

location.setBackgroundResource(R.drawable.background);

location.setPadding(30,

20,

30,

50);

location.setText("分貝值為:"+info);

location.setTextColor(Color.parseColor("#000000"));

final

LatLng

ll

=

marker.getPosition();

Point

p

=

baiduMap.getProjection().toScreenLocation(ll);

LatLng

llInfo

=

baiduMap.getProjection().fromScreenLocation(p);

mInfoWindow

=

new

InfoWindow(location,llInfo,0);

baiduMap.showInfoWindow(mInfoWindow);

Toast.makeText(getApplicationContext(),

info,

Toast.LENGTH_SHORT).show();

return

false;

}

});

}

5.1.2移動客戶端網(wǎng)絡(luò)編程本次設(shè)計中,客戶端的網(wǎng)絡(luò)編程是使用xUtils3開源框架來進行實現(xiàn)的。xUtils3中擁有HttpUtils網(wǎng)絡(luò)模塊,具有更全面的http請求協(xié)議支持,大致包括了GET請求、POST請求、如何使用其他請求方式、上傳文件、下載文件、使用緩存等功能。下面是針對為用戶提供服務(wù)器噪聲定位數(shù)據(jù),使用xUtils3框架實現(xiàn)的網(wǎng)絡(luò)交互:private

void

getvalue(){

RequestParams

params

=

new

RequestParams(

"http://campus.free.ngrok.cc/Service/servlet/GetValue");

x.http().get(params,

new

Callback.CacheCallback<String>()

{…}通過http網(wǎng)絡(luò)請求,請求方式是為get方式,返回的數(shù)據(jù)json數(shù)據(jù),由于服務(wù)器端返回的是jsonArray數(shù)據(jù)格式,所以定義VoiceBean對象類進行json數(shù)據(jù)的解析,解析方式則是通過Google提供的用于解析json的一個開源框架Gson。5.1.3移動客戶端主界面邏輯移動客戶端的主要功能界面是用FragmentTabHost實現(xiàn)的選項卡菜單界面,分別為Hotspot、Auxiliary和PersonalInfo3個選項界面。FragmentTabHost替代了TabHost的類,TabHost在4.3.0版本后被廢棄了。(1)首先,我們在activity_homepage.xml布局文件中放置一個FragmentTabHost布局:<android.support.v4.app.FragmentTabHost

android:id="@android:id/tabhost"

android:layout_width="match_parent"

android:layout_height="wrap_content"

>

(2)我們還需要設(shè)計一個選項卡菜單布局文件為tab_item_view.xml:(3)最后構(gòu)建主活動界面,在構(gòu)建之前要實例化TabHost聲明了mFragmentArray、mImageArray、mTextArray三個對象,分別是活動界面、選項卡圖標(biāo)和選項卡名稱,initView()方法構(gòu)建FragmentTabHost選項卡。

private

Class

mFragmentArray[]

=

{Hotspot.class,

Auxiliary.class,

PersonalInfo.class};

private

int

mImageArray[]

=

{R.drawable.tab_hotspot,R.drawable.tab_auxiliary,R.drawable.tab_personal_info};

private

String

mTextArray[]

=

{"校園熱點","輔助功能","我的信息"};

通過for循環(huán)依次將選項卡插入到布局中,設(shè)置圖標(biāo)和文字。for(int

i=0;i<count;i++){

TabHost.TabSpec

tabSpec

=

mTabHost.newTabSpec(mTextArray[i]).setIndicator(getTabItemView(i));

mTabHost.addTab(tabSpec,mFragmentArray[i],bundle);

mTabHost.getTabWidget().getChildAt(i)

.setBackgroundResource(R.drawable.background);

}

5.1.4移動客戶端活動跳轉(zhuǎn)在Android中進行頁面跳轉(zhuǎn)主要使用Intent實現(xiàn)活動的顯示跳轉(zhuǎn),它不僅指明了當(dāng)前組件想要執(zhí)行的動作,還可以在不同組件之間進行數(shù)據(jù)傳遞。在本文中大部分的活動跳轉(zhuǎn)都使用Intent進行,下面就是使用Intent進行活動跳轉(zhuǎn)同時進行數(shù)據(jù)傳遞:

if

(loginBean.getFlag().equals("0"))

{

Intent

school_intent

=

new

Intent(MainActivity.this,

HomePageActivity.class);

/*用于將用戶名參數(shù)傳遞給后面的活動*/

school_intent.putExtra("username",transfor);

startActivity(school_intent);

}

以上是登陸界面的活動跳轉(zhuǎn),登陸成功后,界面跳轉(zhuǎn)到主活動界面,通過putExtra方法的重載,我們可以將用戶名信息傳遞給主活動界面,當(dāng)主活動頁面啟動后,我們就可以通過getStringExtra方法從Intent中取出數(shù)據(jù),用于在標(biāo)題位置注明用戶如下所示:private

String

getUsername(){

toolbar

=

(Toolbar)

findViewById(R.id.homepage_toolbar);

Intent

intent

=

getIntent();

String

str

=

intent.getStringExtra("username");

return

str;

}

5.2服務(wù)器端的實現(xiàn)5.2.1基本說明本文中,服務(wù)器是以自己的計算機作為服務(wù)器,數(shù)據(jù)庫則是采用的MySQL關(guān)系型數(shù)據(jù)庫,服務(wù)器是使用MyEclipse開發(fā)工具中集成的Tomcat搭建服務(wù)器,使用的是Java語言,用MyEclipse為客戶端建立servlet。為了給更多的用戶群體移動訪問服務(wù)器,通過Ngrok反向代理服務(wù)進行內(nèi)網(wǎng)穿透,將服務(wù)器部署在公網(wǎng)便于測試和使用。5.2.2服務(wù)器核心API接口噪聲定位顯示用戶想要直觀的查看噪聲定位分布以及噪聲數(shù)值,需要訪問服務(wù)器獲取服務(wù)器上的所有數(shù)據(jù),此時通過http請求訪問服務(wù)器,服務(wù)器從數(shù)據(jù)庫中獲取到所有數(shù)據(jù)以后返回一個jsonarray數(shù)據(jù)給客戶端。public

void

doPost(HttpServletRequest

request,

HttpServletResponse

response)

throws

ServletException,

IOException

{

PrintWriter

out

=

response.getWriter();

Connection

con

=

null;

PreparedStatement

ps

=

null;

ResultSet

rs

=

null;

String

sql

=

null;

JSONArray

jsonarray

=

new

JSONArray();

JSONObject

jsonobj

=

new

JSONObject();

con

=

DbConn.getConn();

try

{

sql

=

"select

*

from

positioninfo";

ps

=

con.prepareStatement(sql);

rs

=

ps.executeQuery();

while(rs.next()){

jsonobj.put("ID",

rs.getInt("id"));

jsonobj.put("user",

rs.getString("user_loginname"));

jsonobj.put("noise",

rs.getString("noise_value"));

jsonobj.put("lotitude",

rs.getString("lotitude"));

jsonobj.put("longitude",

rs.getString("longitude"));

System.out.println(jsonobj.toString());

jsonarray.add(jsonobj);

}

out

=

response.getWriter();

out.println(jsonarray);

}

catch

(Exception

e)

{

//

TODO

Auto-generated

catch

block

e.printStackTrace();

}

finally

{

try

{

if(rs

!=

null){

rs.close();

}

if(ps

!=

null){

ps.close();

}

if(con

!=

null){

con.close();

}

}

catch

(SQLException

e)

{

//

TODO

Auto-generated

catch

block

e.printStackTrace();

}

}

out.flush();

out.close();

}

用戶登陸客戶在使用客戶端程序時,需要進行用戶登陸操作,登陸時需要提供對應(yīng)的用戶名密碼參數(shù),服務(wù)器接收到參數(shù)后與數(shù)據(jù)庫進行匹配操作,操作完成后返回json格式的響應(yīng)數(shù)據(jù),其中“flag”值為0時,密碼正確,“flag”值為1時,密碼錯誤,“flag”值為2時,用戶不存在。public

void

doPost(HttpServletRequest

request,

HttpServletResponse

response)

throws

ServletException,

IOException

{

PrintWriter

out

=

response.getWriter();

Connection

con

=

null;

PreparedStatement

ps

=

null;

ResultSet

rs1

=

null;

ResultSet

rs2

=

null;

String

sql

=

null;

String

username

=

request.getParameter("username");

String

password

=

request.getParameter("password");

con

=

DbConn.getConn();

try

{

sql

=

"select

count(id)

from

loginuser

where

user_loginname

=

?";

ps

=

con.prepareStatement(sql);

ps.setString(1,

username);

rs1

=

ps.executeQuery();

while(rs1.next()){

int

count

=

rs1.getInt(1);

if(count

>

0){

sql

=

"select

user_pwd

from

loginuser

where

user_loginname

=

?";

ps

=

con.prepareStatement(sql);

ps.setString(1,

username);

rs2

=

ps.executeQuery();

while(rs2.next()){

String

pwd

=

rs2.getString(1);

if(pwd.equals(password)){

out.write("{\"flag\":\"0\"}");

//密碼正確

}

else

{

out.write("{\"flag\":\"1\"}");

//密碼錯誤

}

}

}

else

{

out.write("{\"flag\":\"2\"}");

//用戶不存在

}

}

}

catch

(SQLException

e)

{

//

TODO

Auto-generated

catch

block

e.printStackTrace();

}

finally

{

try

{

if(rs2

!=

null){

rs2.close();

}

if(rs1

!=

null){

rs1.close();

}

if(ps

!=

null){

ps.close();

}

if(con

!=

null){

con.close();

}

}

catch

(SQLException

e)

{

//

TODO

Auto-generated

catch

block

e.printStackTrace();

}

}

out.flush();

out.close();

}

5.3Ngrok內(nèi)網(wǎng)穿透5.3.1基本說明Ngrok是當(dāng)下非常流行的一項反向代理服務(wù),用于進行內(nèi)網(wǎng)穿透,通過在公共的端點和本地運行的Web服務(wù)器之間建立一個安全的通道。這樣我們就可以將本地的Web服務(wù)器部署在外網(wǎng)上供所有用戶進行使用和調(diào)試等操作,本服務(wù)支持80端口以及自定義tcp端口轉(zhuǎn)發(fā)等。5.3.2使用方法(1)在ngrok官網(wǎng)申請一個賬號,并登陸。(2)點擊隧道管理,進行開通隧道。(3)購買免費版本的。(4)依次填入各項信息,注意本地端口要和tomcat的web項目的http訪問端口對應(yīng),如圖5.6。圖5.6購買隧道(5)添加成功后,就可以在管理界面查看對應(yīng)的隧道信息,如圖5.7所示,復(fù)制隧道ID。5.7隧道管理(6)下載Ngrok工具后啟動,如圖5.8所示,填入隧道id后回車即可成功開啟。5.8啟動Ngrok工具(7)最后啟動Tomcat上的服務(wù)器,就可以訪問服務(wù)器進行交互。5.4本章小結(jié)本章介紹了移動客戶端核心模塊的具體實現(xiàn)方法和服務(wù)器搭建方式,簡單介紹了服務(wù)器核心API的實現(xiàn),最后講解了ngrok的使用方式。

第六章總結(jié)和展望6.1本文總結(jié)本文在著手應(yīng)用設(shè)計之前,做了充分的調(diào)查與研究。在對社區(qū)應(yīng)用發(fā)展背景進行了解后,對群智感知技術(shù)、獎勵機制以及Android開發(fā)技術(shù)進行了深入研究,從而完成了系統(tǒng)的設(shè)計。經(jīng)過需求分析、功能設(shè)計以及架構(gòu)設(shè)計后,實現(xiàn)了系統(tǒng)模塊功能。本文首先介紹了Android移動應(yīng)用開發(fā)特點,包括Android的4層平臺架構(gòu)、Android開發(fā)的優(yōu)勢。同時介紹了本文中涉及到的Android開源框架xUtils3,列舉了它的主要功能與特性,簡單分析了Android多種開發(fā)應(yīng)用模式的之間的區(qū)別。此外,本文著重分析了群智感知技術(shù)的數(shù)據(jù)采集方式,比較了機會感知和參與式感知的不同之處,提出使用獎勵機制來提高用戶參與任務(wù)的積極性。然后,本文對系統(tǒng)應(yīng)用進行了需求分析,包括用戶群體和應(yīng)用環(huán)境分析,并在此基礎(chǔ)上完成了應(yīng)用的主要功能設(shè)計。此外,還在設(shè)計中引入了獎勵機制模型的設(shè)計,系統(tǒng)功能更加完善。緊接著,本文對系統(tǒng)做了較為詳細的研究與設(shè)計,完成了系統(tǒng)的架構(gòu)設(shè)計,包括客戶端和服務(wù)器端的設(shè)計,同時還介紹了服務(wù)器端的Ngrok內(nèi)網(wǎng)映射技術(shù)。對客戶端和服務(wù)器端交互設(shè)計也做了簡單的介紹。最后,本文詳細地介紹了系統(tǒng)功能模塊的實現(xiàn)方法,包括客戶端主要功能的實現(xiàn)方法和前提要素、服務(wù)器端的搭建和API接口實現(xiàn)以及Ngrok內(nèi)外映射的使用方法。從課題研究到系統(tǒng)設(shè)計再到模塊實現(xiàn),具有較強的創(chuàng)新與實踐意義。6.2未來工作展望隨著移動應(yīng)用開發(fā)技術(shù)的飛速發(fā)展,用戶的需求也逐漸變得多樣化。移動應(yīng)用也要在原有的基礎(chǔ)上不斷開拓創(chuàng)新,多次開發(fā)來滿足廣大用戶的要求,在提供良好的用戶體驗前提下,提供更加智能、優(yōu)質(zhì)的服務(wù)。由于作者技術(shù)學(xué)識淺薄,本文仍然有許多的改進之處。例如本文原計劃將噪聲采集環(huán)境定于室內(nèi)例如圖書館等地。由于技術(shù)的限制,將噪聲采集范圍定在了百度地圖上的某一點,用戶只能將自身所處的位置的噪聲進行采集上傳,由于環(huán)境是處在校園中,校園作為學(xué)習(xí)交流場所,本身不會存在大量的噪聲因素,所以存在著上傳數(shù)據(jù)差距不明顯,不具代表性等因素。另外,本文雖然創(chuàng)新性的引入了獎勵機制來提高用戶積極性,但是并沒有對

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論