freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android平臺(tái)的crm系統(tǒng)客戶端軟件的研究與實(shí)現(xiàn)畢業(yè)論文-資料下載頁

2025-06-28 00:29本頁面
  

【正文】 景。當(dāng)狀態(tài)為“點(diǎn)擊”(state_enabled)時(shí)。4) 創(chuàng)建并設(shè)置列表界面GroupLayout。在GroupLayout中申明列表layout中定義的控件,包括:l TextViewgroupTitleTextView:列表標(biāo)題;l LinearLayout groupContentLayout:用于存放列表項(xiàng)item。同樣通過調(diào)用findViewById方法將以上申明的對(duì)象與xml中定義的控件相關(guān)聯(lián)。GroupLayout還提供以下相關(guān)設(shè)置方法,如表52所示。表52 列表樣式控件提供的方法方法說明setGroupContent(ListView items)設(shè)置列表內(nèi)容,將列表項(xiàng)item添加進(jìn)列表中。setGroupTitle(String title)設(shè)置列表標(biāo)題,若不輸入值,則隱藏標(biāo)題。——BaseActivity的實(shí)現(xiàn)BaseActivity為Module的具體實(shí)現(xiàn)提供相關(guān)通用方法,包括向服務(wù)器的請(qǐng)求方法、相關(guān)監(jiān)聽器、以及通過Handler實(shí)現(xiàn)對(duì)狀態(tài)監(jiān)聽結(jié)果的相關(guān)操作。BaseActivity類圖如圖55所示。圖55BaseActivity類圖1) 向服務(wù)器的請(qǐng)求BaseActivity將提供一個(gè)方法來實(shí)現(xiàn)發(fā)起請(qǐng)求的操作,該方法封裝了向服務(wù)器發(fā)起請(qǐng)求的具體實(shí)現(xiàn)細(xì)節(jié),其子類可以直接調(diào)用該方法實(shí)現(xiàn)發(fā)送請(qǐng)求。方法名為:requestVO,所需要傳入的參數(shù)為:l String url:服務(wù)器地址l WAComponentInstancesVO mWAComponentInstancesVO:請(qǐng)求參數(shù)封裝對(duì)象,將在下一節(jié)詳細(xì)說明l OnVORequestedListener listener:監(jiān)聽器,用以監(jiān)聽請(qǐng)求狀態(tài)在requestVO方法中,將啟動(dòng)一個(gè)線程(Thread)。該線程主要負(fù)責(zé)請(qǐng)求發(fā)送和接收響應(yīng)的工作,并在獲得服務(wù)器響應(yīng)后,通知相應(yīng)模塊進(jìn)行處理。請(qǐng)求方法為:requestVOFromServer(url, mWAComponentInstancesVO,headerList)。客戶端與服務(wù)器進(jìn)行一次通信的流程圖如圖56所示。在調(diào)用requestVO方法后,客戶端將等待服務(wù)器的響應(yīng)。在獲取到服務(wù)器返回的voHttpResponse后,建立一個(gè)消息對(duì)象(Message msg)并將voHttpResponse添加進(jìn)該消息對(duì)象中;若服務(wù)器因某些原因處理失敗,則將失敗狀態(tài)及其相關(guān)提示說明添加到消息對(duì)象中。該消息對(duì)象通過Handler機(jī)制傳遞給相應(yīng)的監(jiān)聽器,監(jiān)聽器根據(jù)消息以及voHttpResponse的響應(yīng)狀態(tài)進(jìn)行相應(yīng)的處理。圖56客戶請(qǐng)求服務(wù)器參數(shù)流程圖2) 監(jiān)聽事件的通知客戶端啟動(dòng)了一個(gè)子線程進(jìn)行服務(wù)器請(qǐng)求的操作。但由于Android平臺(tái)中只允許主線程對(duì)UI進(jìn)行操作和更新,所以當(dāng)服務(wù)器返回處理結(jié)果時(shí),子線程獲取到結(jié)果但卻無法更新UI。因此,需要一種消息機(jī)制來實(shí)現(xiàn)界面的更新操作。Android提供了一個(gè)非常方便且強(qiáng)大的消息處理機(jī)制——Handler。該消息機(jī)制由消息循環(huán)、消息發(fā)送和消息處理三個(gè)部分組成。a) 消息循環(huán)消息處理機(jī)制中,消息存放與消息隊(duì)列中,應(yīng)用程序在運(yùn)行過程中,將針對(duì)該消息隊(duì)列建立一個(gè)循環(huán)。如果隊(duì)列中有消息,主線程會(huì)將消息去除并通知相應(yīng)的Handler處理;若隊(duì)列中沒有消息,則主線程會(huì)進(jìn)入等待狀態(tài),直到下一條消息的到來。b) 消息發(fā)送Android中主要通過Handler來實(shí)現(xiàn)消息的發(fā)送。在發(fā)送消息之前,需要定義消息。消息類為Message。申明Message對(duì)象(msg)后,可以為其設(shè)置標(biāo)志和參數(shù),主要包括消息類型()和消息內(nèi)容()。BaseActivity中所定義的消息類型如表53所示。對(duì)于服務(wù)器返回的VOHttpResponse對(duì)象。在設(shè)置完消息內(nèi)容后,直接調(diào)用Handler中的sendMessage(Message msg)將消息發(fā)送至消息列表中。表53 Handler消息類型消息類型說明REQUEST_SUC請(qǐng)求成功。REQUEST_FAIL請(qǐng)求失敗。REQUEST_FAIL_NOTWASERVER服務(wù)器地址錯(cuò)誤。REQUEST_FAIL_SESSIONTIMEOUT處理超時(shí)。BASE_ACTION_TOAST進(jìn)行Toast消息提示。c) 消息處理在申明Handler對(duì)象時(shí),需要實(shí)現(xiàn)對(duì)消息的處理方法。實(shí)現(xiàn)方式為重寫Handler中的handleMessage(Message msg)方法。在該方法中,并針對(duì)各個(gè)消息實(shí)現(xiàn)其具體處理方式。3) 監(jiān)聽器接口BaseActivity中,申明了針對(duì)請(qǐng)求狀態(tài)和網(wǎng)絡(luò)狀態(tài)的監(jiān)聽器接口,以供其子類實(shí)現(xiàn)。監(jiān)聽器接口類圖如圖57所示。圖57監(jiān)聽器接口類圖請(qǐng)求狀態(tài)監(jiān)聽器接口(OnVORequestedListener)中主要包含兩個(gè)方法:請(qǐng)求成功和請(qǐng)求失敗。網(wǎng)絡(luò)狀態(tài)監(jiān)聽器接口(OnNetWorkStatusCheckedListener)包含一個(gè)方法:網(wǎng)絡(luò)可用狀態(tài)。在Module中,要實(shí)現(xiàn)對(duì)請(qǐng)求狀態(tài)和網(wǎng)絡(luò)狀態(tài)的監(jiān)聽,可讓Module類直接實(shí)現(xiàn)上述兩個(gè)接口并實(shí)現(xiàn)接口中各個(gè)方法的內(nèi)部邏輯。BaseActivity使用Java多態(tài)的概念,在BaseActivity中為監(jiān)聽器接口創(chuàng)建對(duì)象,并在Handler進(jìn)行事件處理時(shí),通過對(duì)象調(diào)用相應(yīng)的方法進(jìn)行處理。該方法寫在BaseActivity中,其子類在觸發(fā)Handler事件后,會(huì)自動(dòng)調(diào)用子類中所定義的監(jiān)聽器中的具體方法進(jìn)行相應(yīng)的處理。4) 其他工具方法BaseActivity中還提供了一些工具方法以供調(diào)用,方法及其相關(guān)說明如表54所示。表54 BaseActivity其他方法說明方法說明readPreference(String key)SharedPreferences工具方法,用來讀取默認(rèn)Preferences文件中所指定key的對(duì)應(yīng)值。readPreference(String xmlname,String key)SharedPreferences工具方法,用來讀取指定Preferences文件中所指定key的對(duì)應(yīng)值。writePreference(String key, String value)SharedPreferences工具方法,用來向默認(rèn)Preferences文件中寫入一個(gè)鍵值對(duì)。writePreference(String xmlname, String key, String value)SharedPreferences工具方法,用來向指定的Preferences文件中寫入一個(gè)鍵值對(duì)。toastMsg(String msgText)Toast信息工具方法,用于通過Toast方式顯示所指定的信息。通過使用Handler消息機(jī)制,將信息傳給Handler進(jìn)行顯示。本系統(tǒng)客戶端以模塊為單位進(jìn)行功能的設(shè)計(jì)和開發(fā),應(yīng)該為各個(gè)模塊提供方便的開發(fā)模式。Module相關(guān)類圖如圖58所示。圖58Module相關(guān)類圖1) App:繼承自Application類,主要用于保存整個(gè)應(yīng)用程序的全局變量及進(jìn)行應(yīng)用程序的初始化相關(guān)工作。2) Module:CRM系統(tǒng)中每一個(gè)特定業(yè)務(wù)為一個(gè)Module。3) Modules:Module的集合。4) MainBoardActivity:應(yīng)用程序可復(fù)用的主界面Activity。5) GridAdapter:Adapter類,實(shí)現(xiàn)主界面數(shù)據(jù)與界面的連接。Module類的相關(guān)屬性及其說明如表55所示。表55Module主要屬性屬性名屬性類型說明mainClazzClass模塊主Activity的類,該類為該模塊的首頁。moduleNameString模塊名,用以唯一識(shí)別模塊titleString模塊標(biāo)題,主要用于在九宮格主界面上的顯示iconIdint模塊圖片素材id。模塊圖片素材存儲(chǔ)于項(xiàng)目工程/res/drawable/目錄下,在項(xiàng)目中各個(gè)素材對(duì)應(yīng)一個(gè)id號(hào)。模塊素材id用于九宮格主界面中模塊圖標(biāo)的顯示。模塊創(chuàng)建及加載流程如圖59所示。圖59 模塊創(chuàng)建加載流程圖在創(chuàng)建一個(gè)模塊的時(shí)候,需要?jiǎng)?chuàng)建其特有的Module類。該模塊的Module類繼承Module基類。底層功能提供Modules類,用于加載所要實(shí)現(xiàn)的模塊。Modules類創(chuàng)建一個(gè)ListModule列表,用于保存所有的模塊。方法為:loadModules(ListModule moduleList)。各個(gè)Module的創(chuàng)建和添加必須在程序啟動(dòng)開始時(shí)進(jìn)行,即在應(yīng)用入口處執(zhí)行模塊的設(shè)置操作。Android應(yīng)用程序的入口并非Main Activity,而是Application。Application類是Android開發(fā)平臺(tái)提供給開發(fā)者用于保存全局變量的基本類,它隨著package創(chuàng)建而創(chuàng)建,因此Application中相關(guān)操作的執(zhí)行先于應(yīng)用的Main Activity。本系統(tǒng)設(shè)計(jì)并實(shí)現(xiàn)了繼承自Application類的App類。App類所負(fù)責(zé)的任務(wù)就是對(duì)應(yīng)用中所有模塊的加載以及相關(guān)全局變量的設(shè)置。在App類的onCreate方法中,執(zhí)行模塊的加載工作,調(diào)用Modules提供的接口即可:(moduleList)。本客戶端提供企業(yè)移動(dòng)應(yīng)用的通用主界面。該主界面以九宮格的方式將客戶端各個(gè)功能模塊的入口呈現(xiàn)出來。主界面類為MainBoardActivity。該類使用Android提供的GridView控件實(shí)現(xiàn)九宮格界面。通過將App類的moduleList中所有的模塊添加進(jìn)GridView中,使客戶端主界面顯示所有模塊的入口。1) 對(duì)象序列化與反序列化a) 序列化對(duì)象在CRM系統(tǒng)中,將客戶端與服務(wù)器之間通信的數(shù)據(jù)封裝為對(duì)象,以序列化的形式實(shí)現(xiàn)對(duì)象的傳輸。所支持的序列化對(duì)象類為WAComponentInstanceVO。WAComponentInstanceVO對(duì)象用戶描述一個(gè)對(duì)服務(wù)器的請(qǐng)求,它封裝了該請(qǐng)求的模塊、具體請(qǐng)求的動(dòng)作、以及請(qǐng)求的相關(guān)參數(shù)。WAComponentInstanceVO的主要屬性如表56所示。表56WAComponentInstanceVO主要屬性屬性名類型說明m_actionsActions請(qǐng)求的行動(dòng),它與組件(模塊)編號(hào)一同區(qū)分每一個(gè)請(qǐng)求。請(qǐng)求行為描述了該請(qǐng)求所要完成的任務(wù)。m_ponentidString組件id號(hào),與行為共同區(qū)分每一個(gè)請(qǐng)求。組件id號(hào)指代該請(qǐng)求數(shù)據(jù)哪一個(gè)功能模塊,或者哪一個(gè)單獨(dú)的組件。m_ponentNameString組件名稱m_ponentVersionString組件版本,該版本需要與服務(wù)器方的相應(yīng)組件的版本一致。在WAComponentInstanceVO確定參數(shù)之前,需要首先確定此次請(qǐng)求所要執(zhí)行的操作,因此,需要對(duì)請(qǐng)求行動(dòng)進(jìn)行描述。本系統(tǒng)客戶端提供了Actions類用以描述請(qǐng)求的行動(dòng)。(String m_actiontype)。該方法定義了一個(gè)行動(dòng)的具體類型。每一個(gè)功能請(qǐng)求都具有其請(qǐng)求行動(dòng)的類型。服務(wù)器在獲取客戶端發(fā)送來的請(qǐng)求后,會(huì)解析出該行動(dòng)類型并進(jìn)行查詢。在找到匹配的行動(dòng)后,服務(wù)器會(huì)進(jìn)行該行動(dòng)對(duì)應(yīng)的業(yè)務(wù)操作。行動(dòng)有可能包含多個(gè),因此,需要使用一個(gè)列表用以保存多個(gè)行動(dòng)。當(dāng)確定請(qǐng)求行動(dòng)后,WAComponentInstanceVO調(diào)用setActions(Actions actions)方法將行動(dòng)添加到VO對(duì)象中。確定行動(dòng)后,VO對(duì)象需要確定相應(yīng)的組件,確定該請(qǐng)求行為屬于哪一個(gè)組件。WAComponentInstanceVO對(duì)象通過調(diào)用setComponentid(String m_ponentid)方法將組件id添加進(jìn)VO中作為請(qǐng)求的其中一個(gè)參數(shù)。請(qǐng)求中另一個(gè)重要的元素即為請(qǐng)求的參數(shù)。本系統(tǒng)提供了對(duì)參數(shù)的描述類。ParamTagVO類通過鍵值對(duì)的方式描述一個(gè)參數(shù)。ParamTagVO類調(diào)用其構(gòu)造函數(shù),將參數(shù)名和參數(shù)值作為鍵值對(duì)傳入并保存。由于ParamTagVO對(duì)象只用于描述單個(gè)參數(shù)。而對(duì)于一次請(qǐng)求,可能需要傳入多個(gè)參數(shù)。以此,就需要使用ParamTagVO數(shù)列進(jìn)行多個(gè)參數(shù)的定義(ArrayListParamTagVO params)。定義好所有的請(qǐng)求參數(shù)后,ReqParamsVO類的實(shí)例添加該參數(shù)數(shù)列,然后Action對(duì)象會(huì)將該ReqParamsVO對(duì)象添加進(jìn)來。一次請(qǐng)求的生成的參數(shù)流示意圖如圖510所示。圖510 請(qǐng)求生成參數(shù)流程圖由上圖可以看出,最后在完成了多個(gè)VO的創(chuàng)建后,生成WAComponentInstancesVO對(duì)象。該對(duì)象則是用于請(qǐng)求的參數(shù)。b) 序列化與反序列化流程序列化流程圖如圖511所示。在將實(shí)現(xiàn)序列化接口的對(duì)象傳入序列化方法中后,將針對(duì)該對(duì)象封裝兩層輸出流,依次為:ByteArrayOutputStream和ObjectOutputStream。之后調(diào)用writeObject方法將對(duì)象寫入指定的輸出流中,在將其轉(zhuǎn)換為字節(jié)數(shù)組,完成序列化。反序列化流程圖如圖512所示。圖511 對(duì)象序列化流程圖圖512 反序列化流程圖對(duì)于傳入反序列化方法的字節(jié)流數(shù)據(jù),使用輸入流ByteArrayInputStream和ObjectInputStream對(duì)其進(jìn)行封裝,然后通過調(diào)用readObject方法,從輸入流中讀取對(duì)象并保存,完成反序列化操作。2) DES加解密本系統(tǒng)中涉及有關(guān)企業(yè)客戶,線索以及訂單等敏感信息,因此有必要對(duì)數(shù)據(jù)的傳輸進(jìn)行加密。本系統(tǒng)采用DES加密算法。對(duì)于DES加解密,Java提供了良好封裝的接口以供調(diào)用。在執(zhí)行加解密操作之前,需要進(jìn)行相應(yīng)的準(zhǔn)備工作,如設(shè)置工作模式、填充模式、初始化向量,獲取密鑰等等。DES一共有電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種模式,不同平臺(tái)下,有關(guān)DES加密
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1