《Android移動(dòng)開發(fā)項(xiàng)目化教程》教學(xué)課件-數(shù)據(jù)處理篇_第1頁
《Android移動(dòng)開發(fā)項(xiàng)目化教程》教學(xué)課件-數(shù)據(jù)處理篇_第2頁
《Android移動(dòng)開發(fā)項(xiàng)目化教程》教學(xué)課件-數(shù)據(jù)處理篇_第3頁
《Android移動(dòng)開發(fā)項(xiàng)目化教程》教學(xué)課件-數(shù)據(jù)處理篇_第4頁
《Android移動(dòng)開發(fā)項(xiàng)目化教程》教學(xué)課件-數(shù)據(jù)處理篇_第5頁
已閱讀5頁,還剩283頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

04數(shù)據(jù)處理篇Android移動(dòng)開發(fā)工程化教程04數(shù)據(jù)處理篇Android移動(dòng)開發(fā)

項(xiàng)目十五SharedPerference與XML工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問工程十八ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享目錄CONTNETS項(xiàng)目十五SharedPerference與XML工程本章導(dǎo)讀所有應(yīng)用程序都必然涉及數(shù)據(jù)的輸入、輸出,Android應(yīng)用也不例外,應(yīng)用程序的參數(shù)設(shè)置、程序運(yùn)行狀態(tài)數(shù)據(jù)這些都需要保存到外部存儲(chǔ)器上,這樣系統(tǒng)關(guān)機(jī)之后數(shù)據(jù)才不會(huì)喪失。Android應(yīng)用開發(fā)是使用Java語言來開發(fā)的,因此開發(fā)者在JavaIO中的編程經(jīng)驗(yàn)大局部都可“移植〞到Android應(yīng)用開發(fā)上,但Android系統(tǒng)還提供了一此專門的IOAPI,通過這些API可以更有效地進(jìn)行輸入、輸出。例如有些時(shí)候,應(yīng)用程序只有少量的數(shù)據(jù)需要保存,而且這些數(shù)據(jù)的格式很簡(jiǎn)單,都是普通的字符串、標(biāo)量類型的值〔比方是否翻開音效、是否使用振動(dòng)效果等〕,對(duì)于這種數(shù)據(jù),Android提供了SharedPreferences進(jìn)行保存。工程十五SharedPerference與XML本章導(dǎo)讀所有應(yīng)用程序都必然涉及數(shù)據(jù)的輸入、輸出,Androi本章導(dǎo)讀SAX〔SimpleAPIforXML〕是指一種接口,或者一個(gè)軟件包。SAX事件驅(qū)動(dòng)型的XML解析方式,順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭、文檔結(jié)束或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),會(huì)觸發(fā)一個(gè)事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對(duì)XML的順序訪問,且是只讀的。由于移動(dòng)設(shè)備的內(nèi)存資源有限,SAX的順序讀取方式更適合移動(dòng)開發(fā)。工程十五SharedPerference與XML本章導(dǎo)讀SAX〔SimpleAPIforXML〕是指一項(xiàng)目要求掌握使用SharedPreferences存儲(chǔ)和獲取數(shù)據(jù)的方法。掌握SAX創(chuàng)建和解析XML文件的方法。了解SharedPreferences實(shí)現(xiàn)原理。工程十五SharedPerference與XML項(xiàng)目要求掌握使用SharedPre掌握SAX創(chuàng)建和解析XMLSharedPreference〔用戶偏好設(shè)置〕可以將數(shù)據(jù)保存在應(yīng)用軟件的私有存儲(chǔ)區(qū),這些存儲(chǔ)區(qū)中的數(shù)據(jù)只能被寫入這些數(shù)據(jù)的軟件讀取。實(shí)際上sharedPreference處理的就是一個(gè)key-value對(duì)。獲取SharedPerference對(duì)象有兩種方法:一個(gè)是通過Activity對(duì)象獲取,方法為getPreferences〔intmode〕;另一種是通過Context對(duì)象獲取,方法為getSharedPreferences〔Stringname,intmode〕。工程十五SharedPerference與XML01SharedPerference簡(jiǎn)介SharedPreference〔用戶偏好設(shè)置〕可以將數(shù)據(jù)保SAX是一個(gè)解析速度快并且占用內(nèi)存少的XML解析器,非常適合用于Android等移動(dòng)設(shè)備。SAX解析XML文件采用的是事件驅(qū)動(dòng),也就是說,它并不需要解析整個(gè)文檔,在按內(nèi)容順序解析文檔的過程中,SAX會(huì)判斷當(dāng)前讀到的字符是否為合法XML語法中的某局部,如果符合就會(huì)觸發(fā)事件。所謂事件,其實(shí)就是一些回調(diào)〔callback〕方法,這些方法〔事件〕定義在ContentHandler接口中。下面是一些ContentHandler接口常用的方法:startDocument()當(dāng)遇到文檔開頭的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些預(yù)處理的工作。endDocument()和上面的方法相對(duì)應(yīng),當(dāng)文檔結(jié)束的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些善后的工作。02SAX的簡(jiǎn)介工程十五SharedPerference與XMLSAX是一個(gè)解析速度快并且占用內(nèi)存少的XML解析器,非常適合startElement(StringnamespaceURI,StringlocalName,StringqName,Attributesatts)工程十五SharedPerference與XML當(dāng)讀到一個(gè)開始標(biāo)簽的時(shí)候,會(huì)觸發(fā)這個(gè)方法。namespaceURI就是命名空間,localName是不帶命名空間前綴的標(biāo)簽名,qName是帶命名空間前綴的標(biāo)簽名。通過atts可以得到所有的屬性名和相應(yīng)的值。提示要注意的是SAX中一個(gè)重要的特點(diǎn)就是它的流式處理,當(dāng)遇到一個(gè)標(biāo)簽的時(shí)候,它并不會(huì)記錄下以前所碰到的標(biāo)簽,也就是說,在startElement()方法中,所有你所知道的信息,就是標(biāo)簽的名字和屬性,至于標(biāo)簽的嵌套結(jié)構(gòu),上層標(biāo)簽的名字,是否有子元素等等其他與結(jié)構(gòu)相關(guān)的信息,都是不得而知的,都需要你的程序來完成。startElement(StringnamespaceUendElement(Stringuri,StringlocalName,Stringname)這個(gè)方法和上面的方法相對(duì)應(yīng),在遇到結(jié)束標(biāo)簽的時(shí)候,調(diào)用這個(gè)方法。characters(char[]ch,intstart,intlength)這個(gè)方法用來處理在XML文件中讀到的內(nèi)容,第一個(gè)參數(shù)為文件的字符串內(nèi)容,后面兩個(gè)參數(shù)是讀到的字符串在這個(gè)數(shù)組中的起始位置和長度,使用newString(ch,start,length)就可以獲取內(nèi)容。工程十五SharedPerference與XML

endElement(Stringuri,Stringl工程十五SharedPerference與XML創(chuàng)建工程01在eclipse中新建一個(gè)名為AndroidCode15的Android工程工程,在工程下新建名為的包,在包下新建MainActivity、Product和XML2Product三個(gè)Java文件,如圖15-1所示。圖15-1工程目錄結(jié)構(gòu)圖工程十五SharedPerference與XML創(chuàng)建工程01工程十五SharedPerference與XMLXML布局文件的開發(fā)02界面布局如圖15-2所示,總體布局采用RelativeLayout,其內(nèi)部再分為第1區(qū)〔通過Activity方式調(diào)用sharedPerference操作〕,第2區(qū)〔通過Context方式調(diào)用sharedPerference操作〕,第3區(qū)〔讀取XML文件〕,第4區(qū)〔退出按鈕〕四個(gè)局部。第1區(qū)局部采用RelativeLayout布局,包括一個(gè)Textview顯示標(biāo)題,一個(gè)TableLayout內(nèi)含兩個(gè)Button按鈕〔寫入和讀取〕。第2區(qū)局部和第1區(qū)一樣,第3、第4區(qū)局部都只有一個(gè)Button按鈕。圖15-2界面設(shè)置工程十五SharedPerference與XMLXML第1區(qū)局部的布局是在RelativeLayout布局中放置一個(gè)TextView和TableLayout〔包含兩個(gè)Button控件〕,代碼如下:1工程十五SharedPerference與XML下面我們開始編寫實(shí)現(xiàn)布局框架的代碼。<RelativeLayoutandroid:id="@+id/layout_top"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"><!--方法一--><TextViewandroid:id="@+id/tv_title1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="@string/str_title1"/>第1區(qū)局部的布局是在RelativeLayout布局中放置一工程十五SharedPerference與XML<!--讀取和寫入按鈕--><TableLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_title1"android:stretchColumns="*"><TableRowtools:ignore="UselessParent"><Buttonandroid:id="@+id/btn_write1"android:layout_margin="10dp"android:text="@string/btn_write1"/><Buttonandroid:id="@+id/btn_read1"android:layout_margin="10dp"android:text="@string/btn_read1"/></TableRow></TableLayout></RelativeLayout>工程十五SharedPerference與XML<!--讀第2區(qū)局部布局和第1區(qū)局部一樣,只需要修改id和顯示文字局部即可,代碼如下:2工程十五SharedPerference與XML<RelativeLayoutandroid:id="@+id/layout_mid"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/layout_top"android:layout_centerHorizontal="true"><TextViewandroid:id="@+id/tv_title2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="@string/str_title2"/>第2區(qū)局部布局和第1區(qū)局部一樣,只需要修改id和顯示文字局部工程十五SharedPerference與XML<!--讀取和寫入按鈕--><TableLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_title2"android:stretchColumns="*"><TableRowtools:ignore="UselessParent"><Buttonandroid:id="@+id/btn_write2"android:layout_margin="10dp"android:text="@string/btn_write1"/><Buttonandroid:id="@+id/btn_read2"android:layout_margin="10dp"android:text="@string/btn_read1"/></TableRow></TableLayout></RelativeLayout>工程十五SharedPerference與XML<!--讀第3區(qū)局部是讀取XML文件按鈕,由一個(gè)Button按鈕組成,代碼如下:3工程十五SharedPerference與XML<!--顯示XML的按鈕--><Buttonandroid:layout_width="100dp"android:layout_height="wrap_content"android:layout_below="@id/layout_mid"android:layout_centerHorizontal="true"android:layout_margin="10dp"android:id="@+id/btn_show_xml"android:text="@string/btn_show_xml"/>第3區(qū)局部是讀取XML文件按鈕,由一個(gè)Button按鈕組成,第4區(qū)局部是退出按鈕,由一個(gè)Button控件組成,代碼如下:4工程十五SharedPerference與XML<!--退出按鈕--><Buttonandroid:id="@+id/btn_exit"android:layout_width="100dp"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:text="@string/btn_exit"/>按【Ctrl+S】組合鍵保存后退出,至此界面文件就編寫完成了。5第4區(qū)局部是退出按鈕,由一個(gè)Button控件組成,代碼如下:工程十五SharedPerference與XMLJava程序的開發(fā)03MainActivity是主程序,作用是控制主界面上各個(gè)控件的作用。onCreate()方法在程序創(chuàng)立時(shí)候調(diào)用,initView()方法用于初始化控件,建立與XML文件中控件的對(duì)應(yīng)關(guān)系。下面對(duì)其關(guān)鍵代碼進(jìn)行分析。工程十五SharedPerference與XMLJava程序工程十五SharedPerference與XML以下代碼定義文本顯示控件和按鈕控件。1//控件TextViewtvTile1,tvTile2;ButtonbtnWrite1,btnRead1,btnWrite2,btnRead2,btnExit,btnShowXML;

工程十五SharedPerference與XML以下代碼定義工程十五SharedPerference與XML給控件設(shè)置監(jiān)聽器,使得當(dāng)單擊界面中不同控件時(shí)觸發(fā)對(duì)應(yīng)響應(yīng)事件。2privatevoidinitListener(){ btnWrite1.setOnClickListener(this); btnRead1.setOnClickListener(this); btnWrite2.setOnClickListener(this); btnRead2.setOnClickListener(this); btnExit.setOnClickListener(this); btnShowXML.setOnClickListener(this);}工程十五SharedPerference與XML給控件設(shè)置監(jiān)工程十五SharedPerference與XMLprivatevoidinitView(){ tvTile1=(TextView)findViewById(R.id.tv_title1); btnWrite1=(Button)findViewById(R.id.btn_write1); btnRead1=(Button)findViewById(R.id.btn_read1); tvTile2=(TextView)findViewById(R.id.tv_title2); btnWrite2=(Button)findViewById(R.id.btn_write2); btnRead2=(Button)findViewById(R.id.btn_read2); btnExit=(Button)findViewById(R.id.btn_exit); btnShowXML=(Button)findViewById(R.id.btn_show_xml);}工程十五SharedPerference與XMLprivat工程十五SharedPerference與XMLonClick()方法里包括對(duì)應(yīng)界面中各個(gè)控件的操作處理方法,以下代碼調(diào)用Product類的屬性來顯示產(chǎn)品信息。3publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub switch(v.getId()){ caseR.id.btn_show_xml:

//單擊解析xml文件

InputStreamis=getResources().openRawResource(R.ducts);

XML2Productxml2Product=newXML2Product();

try{ //轉(zhuǎn)換成utf-8編碼

android.util.Xml.parse(is,Xml.Encoding.UTF_8,xml2Product);

}工程十五SharedPerference與XMLonClic工程十五SharedPerference與XML

catch(IOExceptione1){

//TODOAuto-generatedcatchblock ();

}catch(SAXExceptione1){

//TODOAuto-generatedcatchblock ();

}

List<Product>products=xml2Product.getProducts();

Stringmsg="共"+products.size()+"個(gè)產(chǎn)品\n";

for(Productproduct:products){ msg+="id:"+product.getId()+"\t產(chǎn)品名:"+product.getName() +"\t價(jià)格:"+product.getPrice()+"\n";

}

newAlertDialog.Builder(this).setTitle("產(chǎn)品信息").setMessage(msg)

.setPositiveButton("關(guān)閉",null).show();

break;}工程十五SharedPerference與XML catch工程十五SharedPerference與XML通過Activity方式調(diào)用sharedPreference的Button方法。4caseR.id.btn_write1: //通過Activity的方式調(diào)用sharedPreference //key-value對(duì)的文件名,MODE_PRIVATE默認(rèn)方式能被所有app讀取 try{ sharedPreferences=getPreferences(MODE_PRIVATE); //參加K-V對(duì) editor=sharedPreferences.edit(); ("name","訊方通信技術(shù)"); (); Toast.makeText(this,"寫入成功!",Toast.LENGTH_SHORT).show(); }catch(Exceptione){ //TODOAuto-generatedcatchblock Toast.makeText(this,"寫入失敗!",Toast.LENGTH_SHORT).show(); (); }break;工程十五SharedPerference與XML通過Acti工程十五SharedPerference與XML通過Context方式調(diào)用sharedPreference寫入信息。5caseR.id.btn_write2:

//通過Context的方式調(diào)用sharedPreference //key-value對(duì)的文件名默認(rèn)方式能被所有app讀取

try{

sharedPreferences=getSharedPreferences("File1", );

editor=sharedPreferences.edit(); ("name","Android開發(fā)終端"); ();

Toast.makeText(this,"寫入成功!",Toast.LENGTH_SHORT).show();

}catch(Exceptione){

//TODOAuto-generatedcatchblock

Toast.makeText(this,"寫入失敗!",Toast.LENGTH_SHORT).show(); ();

}break;工程十五SharedPerference與XML通過Cont工程十五SharedPerference與XMLpublicclassProduct{ privateStringid,name,price; publicStringgetId(){ returnid;} publicvoidsetId(Stringid){ this.id=id;} publicStringgetName(){ returnname;} publicvoidsetName(Stringname){ =name;} publicStringgetPrice(){ returnprice;} publicvoidsetPrice(Stringprice){ this.price=price;}}Product類是一個(gè)JavaBean,存儲(chǔ)產(chǎn)品類的對(duì)應(yīng)屬性〔編號(hào)、產(chǎn)品名、售價(jià)〕,外部類通過get和set接口訪問Product類的屬性。工程十五SharedPerference與XMLpublic工程十五SharedPerference與XMLstartDocument()方法用于開始分析XML文件。1//開始分析xml @Override publicvoidstartDocument()throwsSAXException{ products=newArrayList<Product>(); }

XML2Product類是對(duì)xml具體操作的方法,下面對(duì)關(guān)鍵代碼進(jìn)行說明。工程十五SharedPerference與XMLstartD工程十五SharedPerference與XMLstartElement()方法用于開始處理xml標(biāo)簽。2//開始處理xml標(biāo)簽@OverridepublicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXException{ if(localName.equals("product")){ product=newProduct(); } super.startElement(uri,localName,qName,attributes);}工程十五SharedPerference與XMLstartE工程十五SharedPerference與XMLendElement()方法用于處理完標(biāo)簽的操作。3//處理完一個(gè)xml標(biāo)簽

@Override publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{ if(localName.equals("product")){ products.add(product); }elseif(localName.equals("id")){ product.setId(buffer.toString().trim()); buffer.setLength(0); }elseif(localName.equals("name")){ product.setName(buffer.toString().trim()); buffer.setLength(0); }elseif(localName.equals("price")){ product.setPrice(buffer.toString().trim()); buffer.setLength(0); } super.endElement(uri,localName,qName); }工程十五SharedPerference與XMLendEle工程十五SharedPerference與XMLendDocument()方法用于處理完xml文件后的操作。4//處理完xml文件

@Override publicvoidendDocument()throwsSAXException{ //TODOAuto-generatedmethodstub super.endDocument(); }工程十五SharedPerference與XMLendDoc工程十五SharedPerference與XMLcharacters()方法用于讀取字符分析點(diǎn)。5//讀取字符分析點(diǎn)

@Override publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{ buffer.append(ch,start,length); super.characters(ch,start,length); }工程十五SharedPerference與XMLcharac工程十五SharedPerference與XML擴(kuò)展練習(xí)04手動(dòng)創(chuàng)建一個(gè)XML文件,參照程序給出的XML文件輸入相應(yīng)內(nèi)容,然后使用程序的XML讀取程序,讀出XML文件的內(nèi)容,如圖15-3所示。1圖15-3產(chǎn)品信息工程十五SharedPerference與XML擴(kuò)展練習(xí)04工程十五SharedPerference與XML在Eclipse中使用FileExplorer中的data/data/AndroidCode15找到SharedPreferences的存儲(chǔ)XML文件,導(dǎo)出查看內(nèi)容,修改內(nèi)容導(dǎo)入覆蓋,用實(shí)驗(yàn)程序讀取出來,如圖15-4~圖15-7所示。2圖15-4xml文件保存位置圖15-5原始xml文件內(nèi)容工程十五SharedPerference與XML在Eclip工程十五SharedPerference與XML圖15-6修改后的xml文件內(nèi)容圖15-7運(yùn)行程序讀取xml文件的結(jié)果工程十五SharedPerference與XML圖15-6工程十五SharedPerference與XML項(xiàng)目驗(yàn)證05將Android開發(fā)終端與PC機(jī)相連。單擊程序圖標(biāo)進(jìn)入程序,在“通過Activity方式調(diào)用sharedPerference”欄下單擊【寫入】按鈕寫入sharedPerference,查看是否寫入成功,如圖15-8所示,然后單擊【讀取】按鈕讀取寫入的信息,如圖15-9所示。1圖15-8寫入sharedPerference圖15-9寫入sharedPerference工程十五SharedPerference與XML項(xiàng)目驗(yàn)證05工程十五SharedPerference與XML單擊程序圖標(biāo)進(jìn)入程序,在“通過Activity方式調(diào)用sharedPerference”欄下單擊【寫入】按鈕寫入sharedPerference,查看是否寫入成功,如圖15-10,然后單擊【讀取】按鈕讀取寫入的信息,如圖15-11所示。2圖15-10寫入sharedPerference文件圖15-11讀取sharedPerference文件工程十五SharedPerference與XML單擊程序圖標(biāo)工程十五SharedPerference與XML單擊【讀取xml文件】顯示結(jié)果SAX引擎分析的XML文件內(nèi)容,如圖15-12所示。3圖15-12讀取XML文件工程十五SharedPerference與XML單擊【讀取x123

什么是SharedPerference?如何使用SAX引擎解析XML文件?如何使用字符流方式讀取數(shù)據(jù)?工程十五SharedPerference與XML123什么是SharedPerference?如何使用SA

項(xiàng)目十五SharedPerference與XML工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問工程十八ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享目錄CONTNETS項(xiàng)目十五SharedPerference與XML工程本章導(dǎo)讀讀者學(xué)習(xí)JavaSE的時(shí)候都知道Java提供了一套完整的I/O流體系,包括FileInputStream、FileOutputStream等,通過這些I/O流可以非常方便地訪問磁盤上的文件內(nèi)容。Android同樣支持以這種方式來訪問存儲(chǔ)器上的文件。工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問本章導(dǎo)讀讀者學(xué)習(xí)JavaSE的時(shí)候都知道Java提供了一套工程要求通過IO操作實(shí)現(xiàn)對(duì)Android內(nèi)部文件、外部存儲(chǔ)設(shè)備中的文件以及資源文件的存儲(chǔ)與訪問。掌握Android中的IO操作與文件操作模式。熟悉Android設(shè)備操作權(quán)限聲明。了解資源文件的使用。工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問工程要求通過IO操作實(shí)現(xiàn)對(duì)Android內(nèi)部文件、外部存儲(chǔ)設(shè)01內(nèi)部文件存儲(chǔ)工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問文件存儲(chǔ)的核心就是輸入和輸出流,如果想對(duì)文件隨心所欲地操作,直接使用流是最好的選擇。讀寫采用openFileOutput()和openFileInput()方法。openFileOutput()方法用如下形式返回一個(gè)OutputStream對(duì)象,并保存在android內(nèi)存中的/data/data/包名/files目錄中,如圖16-1所示。圖16-1內(nèi)存文件存儲(chǔ)01內(nèi)部文件存儲(chǔ)工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問文件存儲(chǔ)的核心文件也可以存儲(chǔ)在SD卡上,下面學(xué)習(xí)將圖像文件保存在SD卡上并讀取出來。使用FileInputStream()和FileOutputStream()來讀寫指定路徑的文件。Context提供了如下兩個(gè)方法來翻開應(yīng)用程序的數(shù)據(jù)文件夾里的文件I/O流。FileInputStreamopenFileInput(Stringname):翻開應(yīng)用程序的數(shù)據(jù)文件夾下的name文件對(duì)應(yīng)輸入流。FileOutputStreamopenFileOutput(Stringname,intmode):翻開應(yīng)用程序的數(shù)據(jù)文件夾下的name文件對(duì)應(yīng)輸出流。02外部文件存儲(chǔ)工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問文件也可以存儲(chǔ)在SD卡上,下面學(xué)習(xí)將圖像文件保存在SD卡上并上面兩個(gè)方法分別用于翻開文件輸入流、輸出流,其中第二個(gè)方法的第二個(gè)參數(shù)指定翻開文件的模式,該模式支持如下值:MODE_PRIVATE:該文件只能被當(dāng)前程序讀寫。MODE_APPEND:以追加方式翻開該文件,應(yīng)用程序可以向該文件中追加內(nèi)容。MODE_WORLD_READABLE:該文件的內(nèi)容可以被其他程序讀取。MODE_WORLD_WRITEABLE:該文件的內(nèi)容可由其他程序讀、寫。除此之外,Context還提供了如下幾個(gè)方法來訪問應(yīng)用程序的數(shù)據(jù)文件夾:getDir(Stringname,intmode):在應(yīng)用程序的數(shù)據(jù)文件夾下獲取或創(chuàng)立name對(duì)應(yīng)的子目錄。FilegetFilesDir():獲取該應(yīng)用程序的數(shù)據(jù)文件夾的絕對(duì)路徑。String[]fileList():返回該應(yīng)用程序的數(shù)據(jù)文件夾下的全部文件。deleteFile(String):刪除該應(yīng)用程序的數(shù)據(jù)文件夾下的指定文件。工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問上面兩個(gè)方法分別用于翻開文件輸入流、輸出流,其中第二個(gè)方法的Android程序使用的資源文件〔文本、音頻、圖像〕可以保存在res/raw或res/assets文件夾下。保持在這兩個(gè)文件夾下的文件會(huì)原封不動(dòng)地保存在apk包中,不會(huì)編譯成二進(jìn)制文件。兩個(gè)文件夾的區(qū)別如下:res/raw中的文件會(huì)被映射到文件中,訪問的時(shí)候直接使用資源ID即;assets文件夾下的文件不會(huì)被映射到中,訪問的時(shí)候需要AssetManager類。res/raw不可以有目錄結(jié)構(gòu),而assets那么可以有目錄結(jié)構(gòu),也就是assets目錄下可以再建立文件夾。工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問03資源文件使用Android程序使用的資源文件〔文本、音頻、圖像〕可以保存工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問下面我們通過一個(gè)具體例子來了解I/O操作和數(shù)據(jù)存儲(chǔ)訪問。創(chuàng)建工程01在eclipse中新建一個(gè)名為AndroidCode16的Android工程,新建名為的包,在包下新建ExeActivity和MainActivity兩個(gè)Java文件,如圖16-2所示。圖16-2工程目錄結(jié)構(gòu)圖工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問下面我們通過一個(gè)具體例子來了解工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問界面布局如圖16-3所示,總體布局采用RelativeLayout,內(nèi)布局為第1區(qū),第2區(qū),第3區(qū),第4區(qū)四個(gè)局部。第1區(qū)布局采用RelativeLayout布局,包括一個(gè)Textview顯示標(biāo)題,一個(gè)TableLayout內(nèi)含兩個(gè)Button按鈕〔寫入和讀取〕;第2區(qū)布局和第1區(qū)布局一樣;第3區(qū)布局是一個(gè)ImageView控件,用來顯示SD卡中的圖片;第4區(qū)布局是一個(gè)Button按鈕,單擊此按鈕退出程序。XML布局文件的開發(fā)02圖16-3界面設(shè)置工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問界面布局如圖16-3所示,總體工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問以下代碼顯示編號(hào)為第1區(qū)的布局,包括一個(gè)文本框TextView和兩個(gè)按鈕控件Button。1整體詳細(xì)布局見源程序中的文件,其中:<RelativeLayoutandroid:id="@+id/layout_top"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"><!--讀寫內(nèi)存卡中數(shù)據(jù)--><TextViewandroid:id="@+id/tv_title1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="@string/str_title1"/>工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問以下代碼顯示編號(hào)為第1區(qū)的布局工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問<!--讀取和寫入按鈕--><TableLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_title1"android:stretchColumns="*"><TableRowtools:ignore="UselessParent"><Buttonandroid:id="@+id/btn_write1"android:layout_margin="10dp"android:text="@string/btn_write1"/><Buttonandroid:id="@+id/btn_read1"android:layout_margin="10dp"android:text="@string/btn_read1"/></TableRow></TableLayout></RelativeLayout>工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問<!--讀取和寫入按鈕--工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問

<!--讀取和寫入按鈕--><TableLayoutandroid:id="@+id/tb_layout_sd"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_title2"android:stretchColumns="*"><TableRowtools:ignore="UselessParent"><Buttonandroid:id="@+id/btn_write2"android:layout_margin="10dp"android:text="@string/btn_write1"/><Buttonandroid:id="@+id/btn_read2"android:layout_margin="10dp"android:text="@string/btn_read1"/></TableRow></TableLayout>以下代碼顯示編號(hào)為第2區(qū)的布局部分,由兩個(gè)按鈕控件Button組成。2工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問<!--讀取和寫入按鈕-工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問<ImageViewandroid:id="@+id/iv_sd"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_above="@id/btn_exit"android:layout_below="@id/tb_layout_sd"android:layout_centerHorizontal="true"android:layout_marginTop="10dp"android:contentDescription="@id/iv_sd"/>以下代碼顯示編號(hào)為第3區(qū)的布局,由一個(gè)圖片顯示控件imageView圖像視圖組成。3工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問<ImageView以下代碼顯工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問<!--退出按鈕--><Buttonandroid:id="@+id/btn_exit"android:layout_width="100dp"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:text="@string/btn_exit"/>以下代碼顯示編號(hào)為第4區(qū)的布局,由一個(gè)Button按鈕組成。4工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問<!--退出按鈕-->以下Java文件的開發(fā)03initView()方法用于初始化控件,綁定xml中定義的TextView、Button和ImageView等。1工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問程序比較簡(jiǎn)單,只有一個(gè)MainActivity文件,關(guān)鍵代碼說明如下://控件

ImageViewivSD; TextViewtvTile1,tvTile2; ButtonbtnWrite1,btnRead1,btnWrite2,btnRead2,btnExit; EditTextetInput; Contextcontext;Java文件的開發(fā)03initView()方法用于初始化控件工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問privatevoidinitView(){ context=MainActivity.this; tvTile1=(TextView)findViewById(R.id.tv_title1); btnWrite1=(Button)findViewById(R.id.btn_write1); btnRead1=(Button)findViewById(R.id.btn_read1); tvTile2=(TextView)findViewById(R.id.tv_title2); btnWrite2=(Button)findViewById(R.id.btn_write2); btnRead2=(Button)findViewById(R.id.btn_read2); btnExit=(Button)findViewById(R.id.btn_exit); ivSD=(ImageView)findViewById(R.id.iv_sd); }工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問privatevoidininitListener()方法用于注冊(cè)監(jiān)聽器,綁定控件,這樣單擊不同控件的時(shí)候會(huì)觸發(fā)不同響應(yīng)。2工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問privatevoidinitListener(){ btnWrite1.setOnClickListener(this); btnRead1.setOnClickListener(this); btnWrite2.setOnClickListener(this); btnRead2.setOnClickListener(this); btnExit.setOnClickListener(this); }initListener()方法用于注冊(cè)監(jiān)聽器,綁定控件,這write2Memeray()方法中使用輸出字符流OutputStream的方式寫入字符串,并在屏幕上給予提示。3工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問/**

*@description把文件寫入內(nèi)存

*@parampath

*文件地址

*/privatevoidwrite2Memery(Stringpath){try{OutputStreamos=openFileOutput(MEM_PATH,Activity.MODE_PRIVATE);//Stringstr="此條信息是從內(nèi)存中讀取。。"; ("utf-8")); ();

Toast.makeText(context,"寫入成功",Toast.LENGTH_SHORT).show();

}catch(Exceptione){

Toast.makeText(context,"讀取失??!).show();

}}write2Memeray()方法中使用輸出字符流OutpuReadFromMemery()方法通過輸入字符流InputStream和字節(jié)流buffer方式從文件中讀取字符串信息。4工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問privatevoidreadFromMemery(){

try{

InputStreamis=openFileInput(MEM_PATH);

byte[]buffer=newbyte[100];

intbyteCount=is.read(buffer);

Stringstr=newString(buffer,0,byteCount,"utf-8");

Toast.makeText(context,str,Toast.LENGTH_SHORT).show();

}catch(Exceptione){

Toast.makeText(context,"讀取失敗!",Toast.LENGTH_SHORT).show();

}}ReadFromMemery()方法通過輸入字符流Inputwrite2SDCard()使用FileOutputStream方式把jpg格式的圖片存入SD卡指定的路徑。5工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問privatevoidwrite2SDCard(){

try{

FileOutputStreamfos=newFileOutputStream(SDCard_PATH);

//把a(bǔ)ssets下的圖片拷入sd卡

InputStreamis=getResources().getAssets().open("image.jpg");

bytebuffer[]=newbyte[8192];//每次最多寫入8k

intcount=0;

while((count=is.read(buffer))>=0){ fos.write(buffer,0,count);

} ();

is.close();Toast.makeText(context,"圖片已經(jīng)存入"+SDCard_PATH,Toast.LENGTH_SHORT).show();

}catch(Exceptione){

Toast.makeText(context,"寫入失?。?,Toast.LENGTH_SHORT).show();

}}write2SDCard()使用FileOutputStrereadFromSDCard()方法調(diào)用getBitmap2()方法從指定路徑讀取圖片,并給予對(duì)應(yīng)操作的提示信息。6工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問privatevoidreadFromSDCard(){

Stringname=SDCard_PATH;

if(!newFile(name).exists()){()+

"中沒有圖像",Toast.LENGTH_SHORT).show();

return;

}

try{

//壓縮載入圖片

Bitmapbitmap=getBitmap2(name,width,height);

ivSD.setImageBitmap(bitmap);

}catch(Exceptione){

Toast.makeText(context,"載入圖像失??!",Toast.LENGTH_SHORT).show();

}}readFromSDCard()方法調(diào)用getBitmap2getBitmap2()方法通過計(jì)算原始圖片的寬和高,然后壓縮圖片,最后得到壓縮過的bitmap圖片。7工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問publicstaticBitmapgetBitmap2(StringimageFilePath,intdisplayWidth,

intdisplayHeight){

BitmapFactory.OptionsbitmapOptions=newBitmapFactory.Options();

bitmapOptions.inJustDecodeBounds=true;

Bitmapbmp=BitmapFactory.decodeFile(imageFilePath,bitmapOptions);

//編碼后bitmap的寬高,bitmap除以屏幕寬度得到壓縮比

intwidthRatio=(int) /(float)displayWidth);

int

/(float)displayHeight);getBitmap2()方法通過計(jì)算原始圖片的寬和高,然后壓工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問

if(widthRatio>1&&heightRatio>1){

if(widthRatio>heightRatio){ //壓縮到原來的(1/widthRatios)

bitmapOptions.inSampleSize=widthRatio;

}else{ bitmapOptions.inSampleSize=heightRatio;

}

}

bitmapOptions.inJustDecodeBounds=false;

bmp=BitmapFactory.decodeFile(imageFilePath,bitmapOptions);

returnbmp; }}工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問 if(widthRatio擴(kuò)展練習(xí)04工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問修改實(shí)驗(yàn)程序,在Android開發(fā)終端的內(nèi)存中創(chuàng)建一個(gè)(自定義名字).txt文件,并寫入內(nèi)容,讀取出文件的內(nèi)容,并輸出文件內(nèi)容。在LogCat中查看輸出消息,如圖16-4和圖16-5所示。1圖16-5打印出內(nèi)存中txt文件的內(nèi)容圖16-4新建txt文件擴(kuò)展練習(xí)04工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問修改實(shí)驗(yàn)程序,在A工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問修改實(shí)驗(yàn)程序,在Android開發(fā)終端的SD卡中創(chuàng)建一個(gè)(自定義名字).txt文件,并寫入內(nèi)容,讀取出文件內(nèi)容,并輸出文件內(nèi)容。在LogCat中查看輸出消息,如圖16-6、圖16-7所示。2圖16-6sd卡中的txt文件圖16-7打印出sd卡中txt文件內(nèi)容工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問修改實(shí)驗(yàn)程序,在Android項(xiàng)目驗(yàn)證05工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問單擊程序圖標(biāo)進(jìn)入程序,在“讀寫內(nèi)存中的文件”欄下單擊【寫入】按鈕,然后在彈出的對(duì)話框中輸入要寫入內(nèi)存的字符串,如圖16-8所示。1用Android開發(fā)終端連接電腦,在電腦中啟動(dòng)eclipse并運(yùn)行實(shí)驗(yàn)工程程序。圖16-8輸入字符串項(xiàng)目驗(yàn)證05工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問單擊程序圖標(biāo)進(jìn)入程工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問單擊【確定】按鈕,看是否成功寫入數(shù)據(jù),如圖16-9所示,然后單擊【讀取】按鈕讀取寫入的信息,如圖16-10所示。1圖16-9寫入內(nèi)存成功圖16-10讀取寫入內(nèi)存的信息工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問單擊【確定】按鈕,看是否成功寫工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問在“讀寫SD卡中的文件”欄下單擊“寫入”按鈕把指定圖片存入SD卡中,查看是否寫入成功,如圖16-11所示,然后單擊“讀取”按鈕讀取寫入的圖片,如圖16-12所示。2圖16-11保存讀入的圖片圖16-12讀取sd卡中的圖片按照擴(kuò)展練習(xí)內(nèi)容完成項(xiàng)目調(diào)試。3工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問在“讀寫SD卡中的文件”欄下單123

數(shù)據(jù)保存在內(nèi)存中和SD卡中有何不同?讀寫數(shù)據(jù)需要什么權(quán)限?讀取圖片時(shí)直接讀取和壓縮讀取有何區(qū)別?工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問123數(shù)據(jù)保存在內(nèi)存中和SD卡中有何不同?讀寫數(shù)據(jù)需要什么

項(xiàng)目十五SharedPerference與XML工程十六IO操作與數(shù)據(jù)存儲(chǔ)訪問工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問工程十八ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享目錄CONTNETS項(xiàng)目十五SharedPerference與XML工程本章導(dǎo)讀Android系統(tǒng)集成了一個(gè)輕量級(jí)的數(shù)據(jù)庫——SQLite,SQLite并不想成為像Oracle、MySQL那樣的數(shù)據(jù)庫。SQLite只是一個(gè)嵌入式的數(shù)據(jù)庫引擎,專門適用于資源有限的設(shè)備上〔如、PDA等〕適量的數(shù)據(jù)存取。雖然SQLite支持絕大局部SQL92語法,也允許開發(fā)者使用SQL語句操作數(shù)據(jù)庫中的數(shù)據(jù),但SQLite并不像Oracle、MySQL數(shù)據(jù)庫那樣需要安裝、啟動(dòng)效勞器進(jìn)程,SQLite數(shù)據(jù)庫只是一個(gè)文件。工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問本章導(dǎo)讀Android系統(tǒng)集成了一個(gè)輕量級(jí)的數(shù)據(jù)庫——SQL工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問項(xiàng)目要求掌握SQLite創(chuàng)建數(shù)據(jù)庫的方法。掌握SQLite中數(shù)據(jù)的添加、修改、刪除操作,熟悉SQLite的操作。使用SQLite實(shí)現(xiàn)圖書信息管理程序,完成圖書信息的錄入、查詢、修改和刪除等操作。工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問項(xiàng)目要求掌握SQLi01SQLite簡(jiǎn)介工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問SQLite是遵守ACID的關(guān)系數(shù)據(jù)庫管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫,是建立的公有領(lǐng)域工程。01SQLite簡(jiǎn)介工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問不像常見的客戶端/效勞器結(jié)構(gòu)范例,SQLite引擎不是一個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要局部。所以主要的通信協(xié)議是在編程語言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上有積極的作用。整個(gè)數(shù)據(jù)庫〔定義、表、索引和數(shù)據(jù)本身〕都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文件中。它簡(jiǎn)單的設(shè)計(jì)是通過在開始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。Android提供了SQLiteDatabase代表一個(gè)數(shù)據(jù)庫〔底層就是一個(gè)數(shù)據(jù)庫文件〕,一旦應(yīng)用程序獲得了代表指定數(shù)據(jù)庫的SQLiteDatabase對(duì)象,接下來就可通過SQLiteDatabase對(duì)象來管理、操作數(shù)據(jù)庫了。工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問不像常見的客戶端/效勞器結(jié)構(gòu)范例,SQLite引擎不是一個(gè)程(1)staticSQLiteDatabaseopenDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory,intflags):打開path文件所代表的SQLite數(shù)據(jù)庫。(2)staticSQLiteDatabaseopenOrCreateDatabase(Filefile,SQLiteDatabase.CursorFactoryfactory):打開或創(chuàng)建(如果不存在)file文件所代表的SQLite數(shù)據(jù)庫。(3)staticSQLiteDatabaseopenOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory):打開或創(chuàng)建(如果不存在)path文件所代表的SQLite數(shù)據(jù)庫。SQLiteDatabase提供了以下靜態(tài)方法來打開一個(gè)文件對(duì)應(yīng)的數(shù)據(jù)庫:工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問(1)staticSQLiteDatabaseopenD工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問在程序中獲取SQLiteDatabase對(duì)象之后,接下來就可調(diào)用SQLiteDatabase的如下方法來操作數(shù)據(jù)庫了:(1)execSQL(Stringsql,Object[]bindArgs):執(zhí)行帶占位符的SQL語句。(2)execSQL(Stringsql):執(zhí)行SQL語句。(6)Cursorquery(Stringtable,String[]columns,StringwhereClause,String[]whereArgs,StringgroupBy,Stringhaving,StringorderBy):對(duì)執(zhí)行數(shù)據(jù)表執(zhí)行查詢。(7)Cursorquery(Stringtable,String[]columns,StringwhereClause,String[]whereArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit):對(duì)執(zhí)行數(shù)據(jù)表執(zhí)行查詢。limit參數(shù)控制最多查詢幾條記錄(用于控制分頁的參數(shù))。(8)Cursorquery(booleandistinct,Stringtable,String[]columns,StringwhereClause,String[]whereArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit):對(duì)指定表執(zhí)行查詢語句。其中第一個(gè)參數(shù)控制是否去除重復(fù)值。(3)insert(Stringtable,StringnullColumnHack,ContentValuesvalues):向執(zhí)行表中插入數(shù)據(jù)。(9)rawQuery(Stringsql,String[]selectionArgs):執(zhí)行帶占位符的SQL查詢。(4)update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs):更新指定表中的特定數(shù)據(jù)。(5)delete(Stringtable,StringwhereClause,String[]whereArgs):刪除指定表中的特定數(shù)據(jù)。(10)beginTransaction():開始事務(wù)。(11)endTransaction():結(jié)束事務(wù)。工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問在程序中獲取SQLi從上面的方法不難看出,其實(shí)SQLiteDatabase的作用有點(diǎn)類似于JDBC的Connection接口,但SQLiteDatabase提供的方法更多:比方insert、update、delete、query等方法,其實(shí)這些方法完全可通過執(zhí)行SQL語句來完成,但Android考慮到局部開發(fā)者對(duì)SQL語法不熟悉,所以提供這些方法幫助開發(fā)者以更簡(jiǎn)單的方式來操作數(shù)據(jù)表的數(shù)據(jù)。工程十七SQLite實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與訪問從上面的方法不難看出,其實(shí)SQLiteDatabase的作用〔1〕move(intoffset):將記錄指針向上或向下移動(dòng)指定的行數(shù)。offset為正數(shù)就是向下移動(dòng);為負(fù)數(shù)就是向上移動(dòng)?!?〕booleanmoveToFirst():將記錄指針移動(dòng)到第一行,如果移動(dòng)成功那么返回true。〔3〕booleanmoveToLast():將記錄指針移動(dòng)到最后一行,如果移動(dòng)成功那么返回true?!?〕booleanmoveToNext():將記錄指針移動(dòng)到下一行,如果移動(dòng)成功那么返回true?!?〕b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論