【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android之旅十三 android中的數(shù)據(jù)傳遞方法_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android之旅十三 android中的數(shù)據(jù)傳遞方法_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android之旅十三 android中的數(shù)據(jù)傳遞方法_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android之旅十三 android中的數(shù)據(jù)傳遞方法_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論