下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android之旅十三android中的數(shù)據(jù)傳遞方法
android開(kāi)發(fā)中,我們的Activity之間總避免不了進(jìn)行數(shù)據(jù)的傳遞,幾種傳遞方式大致如下,各有各的用處:1、Intent攜帶簡(jiǎn)單的數(shù)據(jù)Intentintent=newIntent();
Bundlebundle=newBundle();
bundle.putString("username","Mary");
bundle.putInt("age",23);
intent.putExtras(bundle);
參數(shù)接收:Bundlebundle=getIntent().getExtras();
Stringusername=bundle.getString("username");
intage=bundle.getInt("age");2、Intent攜帶例如ArrayList之類(lèi)復(fù)雜的數(shù)據(jù)
注意:在傳參數(shù)前,要用新增加一個(gè)List將對(duì)象包起來(lái)
初始化數(shù)據(jù):Map<String,String>map=newHashMap<String,String>();
map.put("aaa","hello");
map.put("bbb","world");
List<Map<String,String>>list=newArrayList<Map<String,String>>();
list.add(map);
Intentintent=newIntent();
Bundlebundle=newBundle();
//須定義一個(gè)list用于在bundle中傳遞需要傳遞的List<Object>,這個(gè)是必須要的
ArrayListbundleList=newArrayList();
bundleList.add(list);
bundle.putParcelableArrayList("list",bundleList);
intent.putExtras(bundle);參數(shù)接收:Bundlebundle=getIntent().getExtras();
ListbundleList=bundle.getParcelbleArrayList("list");
List<Map<String,String>>list=(List<Map<String,String>>)bundleList.get(0);
//遍歷輸出3、通過(guò)實(shí)現(xiàn)Serializable接口傳遞參數(shù)
初始化數(shù)據(jù):Map<String,String>map=newHashMap<String,String>();
map.put("aaa","hello");
map.put("bbb","world");
Bundlebundle=newBundle();
bundle.putSerializable("map",map);
Intentintent=newIntent();
intent.putExtras(bundle);參數(shù)接收:Bundlebundle=getIntent().getExtras();
//HashMap沒(méi)問(wèn)題
//LinkedHashMap,轉(zhuǎn)換時(shí)會(huì)拋出ClassCastException,何解
Map<String,String>map=(Map<String,String>)bundle.getSerializable("map");
//遍歷輸出4、通過(guò)實(shí)現(xiàn)Parcelable接口,把要傳的數(shù)據(jù)打包在里面,然后在接收端自己分解出來(lái)。這個(gè)是Android獨(dú)有的,在其本身的源碼中也用得很多,效率要比Serializable相對(duì)要好。Parcelable實(shí)現(xiàn)要點(diǎn):需要實(shí)現(xiàn)三個(gè)東西1)writeToParcel方法。該方法將類(lèi)的數(shù)據(jù)寫(xiě)入外部提供的Parcel中.聲明如下:writeToParcel(Parceldest,intflags)具體參數(shù)含義見(jiàn)javadoc2)describeContents方法。沒(méi)搞懂有什么用,反正直接返回0也可以3)靜態(tài)的Parcelable.Creator接口,本接口有兩個(gè)方法:createFromParcel(Parcelin)實(shí)現(xiàn)從in中創(chuàng)建出類(lèi)的實(shí)例的功能newArray(intsize)創(chuàng)建一個(gè)類(lèi)型為T(mén),長(zhǎng)度為size的數(shù)組,僅一句話(returnnewT[size])即可。估計(jì)本方法是供外部類(lèi)反序列化本類(lèi)數(shù)組使用。定義一個(gè)DataParcelable實(shí)現(xiàn)Parcelable接口,將要傳輸?shù)臄?shù)據(jù)定義在這個(gè)類(lèi)里面:packagecom.xin.activity;
importjava.util.HashMap;
importjava.util.Map;
importandroid.os.Parcel;
importandroid.os.Parcelable;
publicclassDataParcelableimplementsParcelable{
//定義要被傳輸?shù)臄?shù)據(jù)
publicintage;
publicStringusername;
publicStringpassword;
publicMap<String,String>map=newHashMap<String,String>();
@Override
publicintdescribeContents(){
return0;
}
/**
*類(lèi)的數(shù)據(jù)寫(xiě)入外部提供的Parcel
*/
@Override
publicvoidwriteToParcel(Parcelout,intflags){
//將數(shù)據(jù)映射到Parcel中去
out.writeInt(age);
out.writeString(username);
out.writeString(password);
out.writeMap(map);
}
publicstaticfinalParcelable.Creator<DataParcelable>CREATOR=newParcelable.Creator<DataParcelable>(){
/**
*創(chuàng)建出類(lèi)的實(shí)例
*/
@SuppressWarnings("unchecked")
@Override
publicDataParcelablecreateFromParcel(Parcelin){
DataParcelabledata=newDataParcelable();
//將映射在Parcel對(duì)象中的數(shù)據(jù)還原出來(lái)
//這里的順序一定要和writeToParcel中定義的順序一致才行
data.age=in.readInt();
data.username=in.readString();
data.password=in.readString();
data.map=in.readHashMap(HashMap.class.getClassLoader());
returndata;
}
@Override
publicDataParcelable[]newArray(intsize){
returnnewDataParcelable[size];
}
};
}注意上面方法中createFromParcel讀取的順序要和writeToParcel寫(xiě)入的順序一致才行,這樣才能保證相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)能夠按順序被讀取出來(lái)!里面是這樣的一個(gè)設(shè)計(jì)機(jī)制.初始化DataParcelable數(shù)據(jù)并將其放到Intent對(duì)象中去:Intentintent=newIntent(MainActivity.this,OtherActivity.class);
DataParcelabledata=newDataParcelable();
data.age=23;
data.username="hello";
data.password="world";
data.map=newHashMap<String,String>();
data.map.put("aaa","123");
data.map.put("bbb","456");
intent.putExtra("data",data);
startActivity(intent);讀取DataParcel
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45168-2024保健食品中吡啶甲酸鉻的測(cè)定
- A證(企業(yè)負(fù)責(zé)人)-安全員A證考試模擬題練習(xí)
- 滬科版九年級(jí)物理全一冊(cè)《第十七章從指南針到磁浮列車(chē)》章末測(cè)試卷含答案
- 國(guó)企工會(huì)換屆上的領(lǐng)導(dǎo)講話-凝聚奮進(jìn)力量 彰顯工會(huì)作為
- 科技孵化器入駐企業(yè)潛力篩選
- 電力系統(tǒng)設(shè)備故障預(yù)防與處理流程
- 高一化學(xué)二第三章有機(jī)化合物練習(xí)
- 2024屆安徽省示范高中培優(yōu)聯(lián)盟高考化學(xué)三模試卷含解析
- 2024高中地理第3章地理信息技術(shù)應(yīng)用第2節(jié)遙感技術(shù)及其應(yīng)用學(xué)案湘教版必修3
- 2024高中物理第二章交變電流第二節(jié)交變電流的描述達(dá)標(biāo)作業(yè)含解析粵教版選修3-2
- 藝術(shù)品捐贈(zèng)協(xié)議
- 網(wǎng)絡(luò)安全系統(tǒng)運(yùn)維方案
- 2024年標(biāo)準(zhǔn)溝渠回填工程承包協(xié)議版B版
- 2024年專(zhuān)用:物業(yè)安全管理協(xié)議3篇
- 【公開(kāi)課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
- 《政府采購(gòu)業(yè)務(wù)培訓(xùn)》課件
- 《醫(yī)療器械召回管理辦法》培訓(xùn)2024
- 網(wǎng)絡(luò)安全培訓(xùn)內(nèi)容課件
- 通信線路維護(hù)安全培訓(xùn)
- 高職組全國(guó)職業(yè)院校技能大賽(嬰幼兒照護(hù)賽項(xiàng))備賽試題庫(kù)(含答案)
- 2024年公安部直屬事業(yè)單位招聘筆試參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論