廣東工業(yè)大學(xué)安卓期末復(fù)習(xí).doc
《廣東工業(yè)大學(xué)安卓期末復(fù)習(xí).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《廣東工業(yè)大學(xué)安卓期末復(fù)習(xí).doc(9頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
復(fù)習(xí) Java部分 Java的基本語(yǔ)法,簡(jiǎn)單的算法編程實(shí)現(xiàn) 面向過(guò)程的程序設(shè)計(jì):一元二次方程的求解、排序算法的實(shí)現(xiàn)、手工實(shí)現(xiàn)鏈表、打印*號(hào)圖案等。 99乘法表: public class s99{ public static void main(String[] args){ for (int i=1;i<=9;i++) { for (int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.print("\n"); } } } 打?。?hào): - staticvoid printchars(intnum, String s) { for (inti = 1; i<=num; i++) System.out.print(s);} publicstaticvoid main(String[] args) { System.out.println("請(qǐng)輸入一個(gè)奇數(shù):"); Scanner sc = new Scanner(System.in); intn = sc.nextInt(); intline; //上半部分 for (line=1; line<=n/2+1;line++) {intspace = n/2+1 - line; intstar = 2*line - 1;//輸出 printchars(space," "); printchars(star,"*");//輸出回車(chē)換行 System.out.println("");} //下半部分 for (line = n/2+2;line<=n;line++) { intspace = line - (n/2+1); intstar = 2*(n-line+1)-1; //輸出 printchars(space," "); printchars(star,"*"); //輸出回車(chē)換行 System.out.println("");} sc.close();}} 二元一次: import java.util.Scanner; public class equation { public static void main(String[] args){ System.out.println("輸入一元二次系數(shù)a,b,c:"); Scanner in=new Scanner(System.in); int a=in.nextInt(); int b=in.nextInt(); int c=in.nextInt(); double x1,x2; int deta=b*b-4*a*c; if(deta==0){ x1=x2=(-b)/(2*a); System.out.println("x1="+x1); System.out.println("x2="+x2); }else{ double t=Math.sqrt(Math.abs(deta))/(2*a); if(deta>0){ x1=(-b)/(2*a)+t; x2=(-b)/(2*a)-t; System.out.println("x1="+x1); System.out.println("x2="+x2); }else{ x1=(-b)/(2*a); x2=(-b)/(2*a); System.out.println("x1="+x1+"+"+t+"*i"); System.out.println("x2="+x2+"-"+t+"*i");}}}} 排序: package com.sort; public class 直接插入排序 { public static void main(String[] args) { int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1}; System.out.println("排序之前:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" ");} //直接插入排序 for (int i = 1; i < a.length; i++) { //待插入元素 int temp = a[i]; int j; for (j = i-1; j>=0; j--) { //將大于temp的往后移動(dòng)一位 if(a[j]>temp){ a[j+1] = a[j]; }else{ break;}} a[j+1] = temp; } System.out.println(); System.out.println("排序之后:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" ");}}} A. Java的語(yǔ)言機(jī)制(單繼承、引用、對(duì)象創(chuàng)建、集合類(lèi)、包裝類(lèi)、內(nèi)部類(lèi)、接口與向上轉(zhuǎn)型、static代碼塊、異常處理等) a) 單繼承,IS-A關(guān)系,繼承一個(gè)類(lèi)與實(shí)現(xiàn)一個(gè)接口在語(yǔ)義上的區(qū)別 接口傳達(dá)的意思是:擁有某種功能,能干嘛,比如:Serializable代表可序列化的。繼承傳達(dá)的是意思是:is-a,比如:貓 是一個(gè) 動(dòng)物,貓就是動(dòng)物的子類(lèi)。 b) 引用: 相當(dāng)于C++的指針,用于存放地址 Java中: Apple a; //對(duì)象還沒(méi)有創(chuàng)建 a = new Apple(); //對(duì)象創(chuàng)建 C++中:Apple a; //已創(chuàng)建對(duì)象 Apple * a = new Apple(); Java取消了指向基本數(shù)據(jù)類(lèi)型的指針,如何傳遞基本數(shù)據(jù)類(lèi)型的變量的地址?包裝類(lèi)(Wrapper Class) c) 對(duì)象創(chuàng)建 對(duì)象創(chuàng)建過(guò)程受控(禁止用戶隨意通過(guò)new創(chuàng)建對(duì)象):定義private類(lèi)型的構(gòu)造方法,公開(kāi)一個(gè)static的方法,例如getInstance(),返回該類(lèi)的對(duì)象 封裝對(duì)象創(chuàng)建的代碼,特別是針對(duì)復(fù)雜的對(duì)象,每個(gè)類(lèi)知道如何創(chuàng)建自己的對(duì)象 例子:GameDemo注意:Singleton的實(shí)現(xiàn)(單例,即一個(gè)類(lèi)只能有一個(gè)對(duì)象) 集合類(lèi):例如ArrayList,LinkedList,HashSet,了解基本的功能 集合類(lèi)是將多個(gè)元素組成一個(gè)單元的對(duì)象實(shí)現(xiàn)Collection接口,用于儲(chǔ)存、檢索和操縱數(shù)據(jù),以及將數(shù)據(jù)從一個(gè)方法傳輸至另一個(gè)方法 ArrayList:實(shí)現(xiàn)動(dòng)態(tài)增長(zhǎng)的數(shù)組 LinkedList:是通過(guò)節(jié)點(diǎn)直接彼此連接來(lái)實(shí)現(xiàn)的。每一個(gè)節(jié)點(diǎn)都包含前一個(gè)節(jié)點(diǎn)的引用,后一個(gè)節(jié)點(diǎn)的引用和節(jié)點(diǎn)存儲(chǔ)的值。 HashSet:是實(shí)現(xiàn)Set接口的一個(gè)類(lèi),具有以下的特點(diǎn): 不能保證元素的排列順序,順序有可能發(fā)生變化。 另外HashSet不是同步的,如果多個(gè)線程同時(shí)訪問(wèn)一個(gè)Set,只要有一個(gè)線程修改Set中的值,就必須進(jìn)行同步處理,通常通過(guò)同步封裝這個(gè)Set的對(duì)象來(lái)完成同步,如果不存在這樣的對(duì)象,可以使用Collections.synchronizedSet()方法完成。 Set s = Collections.synchronizedSet(new HashSet(...)); 元素值可以是null。 d) 內(nèi)部類(lèi):語(yǔ)法,在類(lèi)、接口、方法、{…}里面定義內(nèi)部類(lèi),可以無(wú)限制的訪問(wèn)外圍類(lèi)的成員 內(nèi)部類(lèi)(Inner Class) 內(nèi)部類(lèi)的定義:定義在類(lèi)、方法體、接口里面的類(lèi)型 內(nèi)部類(lèi)的作用:可以隱藏類(lèi)型 內(nèi)部類(lèi)可以不受限制的訪問(wèn)其外圍類(lèi)的成員,包括外圍類(lèi)的private成員 內(nèi)部類(lèi)的經(jīng)典例子:迭代器(Iterator) e) 接口與向上轉(zhuǎn)型,通過(guò)私有內(nèi)部類(lèi)實(shí)現(xiàn)外圍公開(kāi)的接口,返回對(duì)象時(shí)向上轉(zhuǎn)型為公開(kāi)接口,可以實(shí)現(xiàn)類(lèi)型隱藏 接口(Interface) 是一個(gè)完全抽象的存在,僅能有方法的樣子,不能有實(shí)現(xiàn) 如果有數(shù)據(jù)成員,必須是final 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,使用implements關(guān)鍵字 實(shí)現(xiàn)一個(gè)接口,必須實(shí)現(xiàn)其中的所有方法,或定義為abstract 簡(jiǎn)單例子:SuperMan,實(shí)現(xiàn)了CanFly, CanJump, CanSwim三個(gè)接口 接口的語(yǔ)義:實(shí)現(xiàn)某個(gè)接口,使類(lèi)具備某種能力,如“可拍照”、“CanFly” 接口與繼承都支持向上轉(zhuǎn)型,一個(gè)對(duì)象可以用它實(shí)現(xiàn)的其中一個(gè)接口類(lèi)型的引用去指向,但僅限于使用引用的接口所限制的方法 接口不僅是為了解決Java的多繼承問(wèn)題,還可以用于適配,類(lèi)似于插座之間的轉(zhuǎn)換器 例子:適配器模式(Adapter) RandomNumAdapter1:繼承方式 RandomNumAdapter2:組合方式 組合方式的適配器實(shí)現(xiàn)更加靈活,更接近現(xiàn)實(shí),可以適配RandomNums及其所有的子類(lèi) f) static代碼塊:靜態(tài)代碼塊,類(lèi)被初始化時(shí)調(diào)用一次 static對(duì)象可以在它的任何對(duì)象創(chuàng)建之前訪問(wèn),無(wú)需引用任何對(duì)象 g) 異常處理:兩種異常(Checked/Runtime Exception),異常的語(yǔ)法,異常的繼承層次,異常的匹配(按catch塊的順序) Java異常處理 優(yōu)點(diǎn):正常代碼和異常代碼分離,通過(guò)異常的繼承層次,可以實(shí)現(xiàn)同類(lèi)異常的統(tǒng)一處理 兩種模型:終止模型(處理完異常不回去)、恢復(fù)模型,Java屬于前者 兩大類(lèi)異常:CheckedException(編譯器檢查),RuntimeException Try {會(huì)拋出異常的代碼} catch(異常1) {….} catch{異常2} Finally {清理、關(guān)門(mén)代碼} B. 面向?qū)ο蟪绦蛟O(shè)計(jì)的相關(guān)概念 a) 封裝:類(lèi)、訪問(wèn)控制關(guān)鍵字、包 封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的接口。封裝是一種信息隱藏技術(shù),在java中通過(guò)關(guān)鍵字private實(shí)現(xiàn)封裝。封裝把對(duì)象的所有組成部分組合在一起,封裝定義程序如何引用對(duì)象的數(shù)據(jù),封裝實(shí)際上使用方法將類(lèi)的數(shù)據(jù)隱藏起來(lái),控制用戶對(duì)類(lèi)的修改和訪問(wèn)數(shù)據(jù)的程度。 b) 繼承:構(gòu)造方法的運(yùn)行次序、子類(lèi)方法覆蓋父類(lèi)方法 c) 多態(tài)、動(dòng)態(tài)綁定 Animal a = new Cat(); a.sleep(); a.age //Animal的age 動(dòng)態(tài)綁定僅發(fā)生在類(lèi)的普通成員方法上 多態(tài)的定義:指允許不同類(lèi)的對(duì)象對(duì)同一消息做出響應(yīng)。 實(shí)現(xiàn)多態(tài)的技術(shù)稱為:動(dòng)態(tài)綁定(dynamic binding),是指在執(zhí)行期間判斷所引用對(duì)象的實(shí)際類(lèi)型,根據(jù)其實(shí)際的類(lèi)型調(diào)用其相應(yīng)的方法。 多態(tài)的作用:消除類(lèi)型之間的耦合關(guān)系。 d) 類(lèi)、接口 e) 泛型 泛型的好處是在編譯的時(shí)候檢查類(lèi)型安全,并且所有的強(qiáng)制轉(zhuǎn)換都是自動(dòng)和隱式的,以提高代碼的重用率。泛型的本質(zhì)是參數(shù)化類(lèi)型,也就是說(shuō)所操作的數(shù)據(jù)類(lèi)型被指定為一個(gè)參數(shù) f) 反射(Reflection) 運(yùn)行時(shí)探測(cè)未知對(duì)象的內(nèi)部信息,通過(guò)“波的反射”獲得其內(nèi)部的細(xì)節(jié),并且可以調(diào)用對(duì)象內(nèi)部的所有方法 Zoo2、Zoo3 g) RTTI:運(yùn)行時(shí)類(lèi)型信息 h) 回調(diào):Callback 回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)。 C. 本學(xué)期學(xué)過(guò)的設(shè)計(jì)模式(Java與Android部分) a) 代理/動(dòng)態(tài)代理 n Proxy(代理) 是一個(gè)中介,通過(guò)轉(zhuǎn)發(fā)服務(wù)請(qǐng)求到真正的服務(wù)對(duì)象,如Web代理服務(wù)器:接收用戶請(qǐng)求,轉(zhuǎn)發(fā)請(qǐng)求,獲取數(shù)據(jù),把數(shù)據(jù)回傳給用戶;房地產(chǎn)中介 u 代理可以過(guò)濾一些不必要的請(qǐng)求,或是隱藏服務(wù)對(duì)象的真正身份 u 代理與被代理對(duì)象至少要有相同的接口 b) 適配器 將一個(gè)類(lèi)的接口適配成用戶所期待的。一個(gè)適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念?lèi)工作在一起,做法是將類(lèi)自己的接口包裹在一個(gè)已存在的類(lèi)中。 c) 依賴注入(DI) 依賴注入是Spring的思想,在使用Spring進(jìn)行開(kāi)發(fā)時(shí),可以將對(duì)象交給spring進(jìn)行管理,在初始化時(shí)spring創(chuàng)建一批對(duì)象,當(dāng)你需要用的時(shí)候只要從spring的容器中獲取對(duì)象,而不用自己去new,當(dāng)然在對(duì)象創(chuàng)建的時(shí)候可以注入另一個(gè)對(duì)象。比如A,B兩個(gè)對(duì)象都由spring管理,A中持有對(duì)B的引用,那么spring在生成A對(duì)象的時(shí)候就已經(jīng)吧B對(duì)象的一個(gè)實(shí)例給到A了,當(dāng)你在A中用到B的時(shí)候直接使用就可以了。 d) 對(duì)象工廠 主要是為創(chuàng)建對(duì)象提供過(guò)渡接口,以便將創(chuàng)建對(duì)象的具體過(guò)程屏蔽隔離起來(lái),達(dá)到提高靈活性的目的。如果你有很多地方都需要A的實(shí)例,那編寫(xiě)一個(gè)工廠專(zhuān)門(mén)生成A的實(shí)例(如果生成邏輯改變了,直接修改工廠)。那么這些需要A的實(shí)例的地方只需要從工廠中g(shù)etObject()就可以了,完全不用管我的實(shí)例是咋來(lái)的 e) 迭代器 提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中的各種元素,而又不暴露該對(duì)象的內(nèi)部表示。 f) 單例 確保一個(gè)類(lèi)只有一個(gè)實(shí)例,自行提供這個(gè)實(shí)例并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。 特點(diǎn): 1,一個(gè)類(lèi)只能有一個(gè)實(shí)例; 2,自己創(chuàng)建這個(gè)實(shí)例; 3,整個(gè)系統(tǒng)都要使用這個(gè)實(shí)例。 優(yōu)點(diǎn): 單例模式,能避免實(shí)例重復(fù)創(chuàng)建; 單例模式,應(yīng)用于避免存在多個(gè)實(shí)例引起程序邏輯錯(cuò)誤的場(chǎng)合; 單例模式,較節(jié)約內(nèi)存。 1. Android部分 A. Android的基本程序結(jié)構(gòu): 資源 本體代碼 注冊(cè)文件 Activity:(1)應(yīng)用程序的入口(2)界面顯示,接收事件,控制顯示跳轉(zhuǎn)。 BroadcastReceiver:(1)用于注冊(cè)和接收系統(tǒng)廣播的事件(2)可接收自定義的廣播事件。 ContentProvider:(1)提供數(shù)據(jù)庫(kù)查詢接口(2)可對(duì)外公開(kāi)數(shù)據(jù)查詢服務(wù)。 Service:(1)是一個(gè)獨(dú)立的進(jìn)程,可一直在后臺(tái)運(yùn)行。(2)可以與其他組件通過(guò)遠(yuǎn)程連接綁定進(jìn)行交互。(3)可對(duì)外提供服務(wù)交互接口。(4)生命周期不依賴于其他組件的存在與否。 B. 界面編程模型 a) 界面元素(控件和布局) 界面設(shè)計(jì)原則:大框架用XML配置,部分使用動(dòng)態(tài)界面生成代碼 動(dòng)態(tài)創(chuàng)建控件 綁定事件響應(yīng)的代碼(set Listener方法,類(lèi)似Java) 方法 創(chuàng)建一個(gè)新的Activity:MagicSquareActivity 通過(guò)LinearLayout(vertical)內(nèi)置一個(gè)GridLayout 動(dòng)態(tài)創(chuàng)建Button數(shù)組 給每一個(gè)Button賦值、上顏色,通過(guò)GridLayout.LayoutParams設(shè)置放入的具體參數(shù)(位置、Gravity、大小) b) 事件:添加監(jiān)聽(tīng)器,繼承 c) 資源 1.字符串資源2.Layout資源3.圖像資源 d) XML與Java Code在定義界面元素中的不同作用 XML是靜態(tài)的 Java Code是動(dòng)態(tài)的 e) 9Patch圖片格式 增加了可以伸縮的局部區(qū)域的定義 使用sdk\tools\draw9patch.bat工具 Show patches:指定可復(fù)制的區(qū)域 Show content:控制可顯示的區(qū)域 f) ListView與Adapter 靜態(tài)的ListView,只能顯示簡(jiǎn)單的、靜態(tài)的數(shù)據(jù) 復(fù)雜的數(shù)據(jù)通過(guò)Adapter為L(zhǎng)istView提供數(shù)據(jù),通過(guò)Adapter可以對(duì)ListView的顯示數(shù)據(jù)格式進(jìn)行定制,有4個(gè)具體的子類(lèi) ArrayAdapter:最簡(jiǎn)單,包裝數(shù)組或List類(lèi)型的簡(jiǎn)單數(shù)據(jù) 數(shù)據(jù)與Item的樣式(Layout XML文件)放入ArrayAdapter 與ListView綁定 SimpleAdapter:很復(fù)雜,可以包裝復(fù)雜數(shù)據(jù),可以通過(guò)XML模板定制Item的具體格式 可以顯示復(fù)雜數(shù)據(jù) 數(shù)據(jù)的關(guān)系:使用Map,每個(gè)字段自定一個(gè)唯一的名字,SimpleAdapter會(huì)根據(jù)該名字查找對(duì)應(yīng)的值 顯示的樣式:字段名字與顯示的控件ID綁定,在初始化SimpleAdapter的時(shí)候給出 增加itemClick的事件響應(yīng) SimpleCursorAdapter BaseAdapter:具有最高的可擴(kuò)展性 C. Handler與多線程 為什么需要多線程?同步、并行、UI的響應(yīng)效率 Android的多線程 UI組件并非線程安全,只允許UI的線程去改變其狀態(tài) 定時(shí)更新主界面上的控件狀態(tài) 使用計(jì)時(shí)器:創(chuàng)建一個(gè)新的線程,每隔一定時(shí)間執(zhí)行一次其中的run方法 在主線程中創(chuàng)建一個(gè)Handler,子線程調(diào)用Handler發(fā)送信息,主線程的Handler通過(guò)handlerMessage方法處理接收到的消息 主線程默認(rèn)有一個(gè)Looper,其它線程需要手工創(chuàng)建 Looper從消息隊(duì)列中取出消息,發(fā)送給注冊(cè)了的Handler處理 異步任務(wù) 比Handler輕量化 D. Service:與Activity的數(shù)據(jù)交換 a) BroadCast方式 BroadCastReceiver Android的四大組件 作用:接收其它應(yīng)用程序發(fā)出的BroadCastIntent 相當(dāng)于一個(gè)系統(tǒng)級(jí)監(jiān)聽(tīng)器 發(fā)送廣播的例子,接收者通過(guò)action來(lái)確定要接收的BroadCastIntent 有序廣播 Receiver有優(yōu)先級(jí),系統(tǒng)先回調(diào)優(yōu)先級(jí)高的receiver的onReceive方法 接收者可以往其中加入額外的數(shù)據(jù),傳給下一個(gè)接收者處理,也可以取消廣播 基于Service的播放器 分前臺(tái)和后臺(tái) Activity負(fù)責(zé)顯示音樂(lè)播放的狀態(tài),有play和stop按鈕 Service負(fù)責(zé)播放音樂(lè),并通知前臺(tái)顯示 兩者之間有數(shù)據(jù)交互 思路1:兩者通過(guò)BroadCast通信 b) Binder方式 通過(guò)iBinder對(duì)象,作者稱它是Service組件的內(nèi)部鉤子(hook) 關(guān)于鉤子:源于Windows系統(tǒng)編程,是一種事件(比如:消息、Mouse事件、鍵盤(pán))到達(dá)應(yīng)用程序前中途截獲事件的機(jī)制,鉤子可以修改、丟棄事件,是Windows的一個(gè)后門(mén)。 說(shuō)明 MyBinder繼承Binder,Binder實(shí)現(xiàn)IBinder 公開(kāi)MyBinder給調(diào)用者 通過(guò)onServiceConnected獲取MyBinder對(duì)象的引用 此處用Hook似乎并不恰當(dāng),是Service對(duì)象在調(diào)用者端的表示,應(yīng)該表述為Proxy(代理) 在更一般的情況下,客戶端通過(guò)Proxy發(fā)送請(qǐng)求,Service端通過(guò)一個(gè)特定的對(duì)象去接收,該對(duì)象稱為Stub(存根類(lèi)),Proxy相當(dāng)于遙控器,而Stub相當(dāng)于電視機(jī)里遙控信號(hào)接收模塊。這正是Java的RMI(Remote Method Invoke,遠(yuǎn)程方法調(diào)用)的主要原理。 MyBinder此處同時(shí)扮演了Stub與Proxy的角色 E. BroadCastReceiver a) 全局的BroadCast b) 優(yōu)先次序的BroadCast - BroadCastReceiver n Android的四大組件 n 作用:接收其它應(yīng)用程序發(fā)出的BroadCastIntent n 相當(dāng)于一個(gè)系統(tǒng)級(jí)監(jiān)聽(tīng)器 n 發(fā)送廣播的例子,接收者通過(guò)action來(lái)確定要接收的BroadCastIntent n 有序廣播 u Receiver有優(yōu)先級(jí),系統(tǒng)先回調(diào)優(yōu)先級(jí)高的receiver的onReceive方法 u 接收者可以往其中加入額外的數(shù)據(jù),傳給下一個(gè)接收者處理,也可以取消廣播 n 基于Service的播放器 u 分前臺(tái)和后臺(tái) u Activity負(fù)責(zé)顯示音樂(lè)播放的狀態(tài),有play和stop按鈕 u Service負(fù)責(zé)播放音樂(lè),并通知前臺(tái)顯示 u 兩者之間有數(shù)據(jù)交互 u 思路1:兩者通過(guò)BroadCast通信 F. 數(shù)據(jù)庫(kù)編程 a) 直接操作SQLite u SQLite:Android自帶驅(qū)動(dòng)的小型高效文件數(shù)據(jù)庫(kù),適用于移動(dòng)設(shè)備的本地?cái)?shù)據(jù)存儲(chǔ) u 用SQLiteDatabase直接操作數(shù)據(jù)庫(kù),execSQL支持setParameter,所有動(dòng)作都由原始的SQL語(yǔ)句執(zhí)行 u 可以用SQLiteStudio 3.0.7打開(kāi) b) 通過(guò)ORM層操作數(shù)據(jù)庫(kù) u ORM u 對(duì)象關(guān)系映射:Object Relational Mapping u 理念:持久化保存對(duì)象,面向?qū)ο蟪绦蛟O(shè)計(jì)的核心是一切皆對(duì)象,軟件系統(tǒng)表現(xiàn)為對(duì)象之間的相互作用 u 在業(yè)務(wù)邏輯和用戶界面層中,程序是面向?qū)ο蟮?,?dāng)對(duì)象狀態(tài)發(fā)生變化時(shí),當(dāng)需要保存這種狀態(tài)變化時(shí),需要進(jìn)行逐字段的保存,例如拼接SQL語(yǔ)句,或是給出字段名的update u ORM是一個(gè)自動(dòng)化的機(jī)構(gòu),接收了對(duì)象的持久化請(qǐng)求,底層生成SQL,交給關(guān)系數(shù)據(jù)庫(kù)執(zhí)行,高層代碼只需要與對(duì)象打交道 u 著名的ORM實(shí)現(xiàn) u Java、Web、Servlet:Hibernate u Dot Net平臺(tái):NHibernate u Android:輕量級(jí)的ORM,OrmLite u 通過(guò)Annotations的方式建立對(duì)象與Table的關(guān)聯(lián) u 例子:StuDB,通過(guò)OrmLite持久化Student對(duì)象 u Student的實(shí)體類(lèi):只有數(shù)據(jù)成員,要求按實(shí)體Bean的語(yǔ)法(數(shù)據(jù)成員private小寫(xiě),提供setter/getter) u OrmHelper:負(fù)責(zé)封裝Orm的API,提供盡能簡(jiǎn)單的操作(add, list, edit, del) u OrmHelper中注冊(cè)Dao對(duì)象,用到哪個(gè)就查哪個(gè),如果沒(méi)注冊(cè),就馬上注冊(cè) u StudentDao:Dao是Data Access Object的簡(jiǎn)寫(xiě),是對(duì)Student對(duì)象持久化的操作的具體實(shí)現(xiàn)類(lèi) u OrmHelper與Dao都應(yīng)該是Singleton u 安裝:下載jar文件,放到libs目錄,增加文件依賴 u OrmLiteActivity c) SharedPreferences u SharedPreferences u 用于保存少量簡(jiǎn)單數(shù)據(jù),如配置信息,用戶信息 u 格式:key-value u 操作 u 查詢(isContainKey()) u 讀出 u 寫(xiě)入 u 保存在/data/data/包名/shared_prefs.xml里面 d) ContentProvider u ContentProvider u 作用及背景 u APP之間的數(shù)據(jù)交換,一個(gè)APP通過(guò)ContentProvider可以暴露一些數(shù)據(jù),供其它APP讀/寫(xiě) u Android也允許跨APP訪問(wèn)SharePreferences,不建議這樣做 u 類(lèi)似一個(gè)網(wǎng)站或者是WebService u 實(shí)現(xiàn) u 每個(gè)ContentProvider與特定的Uri(統(tǒng)一資源標(biāo)識(shí)符),在Manifest文件中指定 u 編寫(xiě)ContentProvider的子類(lèi),覆蓋4個(gè)方法:query、insert、update、delete(查、增、改、刪) u 外界APP通過(guò)在ContentResolver中指明Uri及對(duì)應(yīng)的方法去調(diào)用 u ContentResolver中的Uri是一個(gè)參數(shù) u Uri本身可以帶參數(shù),UriMatcher工具幫我們處理Uri帶的參數(shù) content://gdut.iot.FirstProvider/female-students u 接受什么參數(shù),是各個(gè)方法自行定義的 u Uri是ContentProvider的4個(gè)方法的參數(shù),如何把Uri中后面跟的參數(shù)取出來(lái)? u 基于ContentProvider的生詞本 u 訪問(wèn)系統(tǒng)自帶的ContentProvider(自行閱讀) u ContentObserver u 觀察者模式 u 監(jiān)視ContentProvider的數(shù)據(jù)變化 u 直接操作XML:PULL方式與DOM方式操作XML的區(qū)別 u 直接操作XML文件 u Java使用DOM(Document Object Model)的方式操作XML,DOM需要先加載整個(gè)XML文件到內(nèi)存并生成結(jié)點(diǎn)的樹(shù)狀結(jié)構(gòu),可以通過(guò)XPath表達(dá)式進(jìn)行高效的搜索 u 適合Android的方式是PULL(默認(rèn)的方式) u 通過(guò)XmlResourceParser讀寫(xiě) u 逐標(biāo)記的讀,需要寫(xiě)一堆的if-else語(yǔ)句判斷標(biāo)記的名字,然后作出不同的動(dòng)作 e) 操作NoSQL:SnappyDB u NoSQL u Not Only SQL,指非關(guān)系型數(shù)據(jù)庫(kù) u 數(shù)據(jù)不是以二維表的形式存放的 u 以key-value的方式 u 以文檔集的方式 u 以其它復(fù)雜的方式(圖) G. 網(wǎng)絡(luò)編程 a) 直接操作Socket:服務(wù)器端實(shí)現(xiàn)(多線程,在著名端口上監(jiān)聽(tīng),每個(gè)客戶端通過(guò)不同的線程提供服務(wù)) b) 操作HTTP:下載URL指向的資源、網(wǎng)絡(luò)爬蟲(chóng)原理、維持Session i. GET、POST請(qǐng)求 ii. 多線程下載、斷點(diǎn)續(xù)傳的例子 iii. JSON數(shù)據(jù)格式:語(yǔ)法,JSON格式與Java、JavaScript對(duì)象之間的轉(zhuǎn)換 iv. 電子拍賣(mài)系統(tǒng)的客戶端實(shí)現(xiàn)(Server端、Struts、Spring、Hibernate不需要) 網(wǎng)絡(luò)爬蟲(chóng)的基本原理: 1.首先選取一部分精心挑選的種子URL; 2.將這些URL放入待抓取URL隊(duì)列; 3.從待抓取URL隊(duì)列中取出待抓取在URL,解析DNS,并且得到主機(jī)的ip,并將URL對(duì)應(yīng)的網(wǎng)頁(yè)下載下來(lái),存儲(chǔ)進(jìn)已下載網(wǎng)頁(yè)庫(kù)中。此外,將這些 URL放進(jìn)已抓取URL隊(duì)列。 4.分析已抓取URL隊(duì)列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊(duì)列,從而進(jìn)入下一個(gè)循環(huán)。- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 廣東工業(yè)大學(xué) 期末 復(fù)習(xí)
鏈接地址:http://zhongcaozhi.com.cn/p-8989420.html