日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

java数据传递给安卓_Android数据传递的五种方法汇总

發布時間:2024/10/6 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java数据传递给安卓_Android数据传递的五种方法汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android開發中,在不同模塊(如Activity)間經常會有各種各樣的數據需要相互傳遞,我把常用的幾種 方法都收集到了一起。它們各有利弊,有各自的應用場景。 我現在把它們集中到一個例子中展示,在例子中每一個按紐代表了一種實現方法。

1. 利用Intent對象攜帶簡單數據

利用Intent的Extra部分來存儲我們想要傳遞的數據,可以傳送int, long, char等一些基礎類型,對復雜的對象就無能為力了。

1.1 設置參數

//傳遞些簡單的參數

Intent?intentSimple?=?new?Intent();

intentSimple.setClass(MainActivity.this,SimpleActivity.class);

Bundle?bundleSimple?=?new?Bundle();

bundleSimple.putString("usr",?"xcl");

bundleSimple.putString("pwd",?"zj");

intentSimple.putExtras(bundleSimple);

startActivity(intentSimple);

1.2?接收參數

this.setTitle("簡單的參數傳遞例子");

//接收參數

Bundle?bunde?=?this.getIntent().getExtras();

String?eml?=?bunde.getString("usr");

String?pwd?=?bunde.getString("pwd");

2. 利用Intent對象攜帶如ArrayList之類復雜些的數據

這種原理是和上面一種是一樣的,只是要注意下。 在傳參數前,要用新增加一個List將對象包起來。

2.1?設置參數

//傳遞復雜些的參數

Map?map1?=?new?HashMap();

map1.put("key1",?"value1");

map1.put("key2",?"value2");

List>?list?=?new?ArrayList>();

list.add(map1);

Intent?intent?=?new?Intent();

intent.setClass(MainActivity.this,ComplexActivity.class);

Bundle?bundle?=?new?Bundle();

//須定義一個list用于在budnle中傳遞需要傳遞的ArrayList,這個是必須要的

ArrayList?bundlelist?=?new?ArrayList();

bundlelist.add(list);

bundle.putParcelableArrayList("list",bundlelist);

intent.putExtras(bundle);

startActivity(intent);

2.1 接收參數

?????this.setTitle("復雜參數傳遞例子");

//接收參數

Bundle?bundle?=?getIntent().getExtras();

ArrayList?list?=?bundle.getParcelableArrayList("list");

//從List中將參數轉回?List>

List>?lists=?(List>)list.get(0);

String?sResult?=?"";

for?(Map?m?:?lists)

{

for?(String?k?:?m.keySet())

{

sResult?+=?"\r\n"+k?+?"?:?"?+?m.get(k);

}

}

3. 通過實現Serializable接口

3.1 設置參數

利用Java語言本身的特性,通過將數據序列化后,再將其傳遞出去。

//通過Serializable接口傳參數的例子

HashMap?map2?=?new?HashMap();

map2.put("key1",?"value1");

map2.put("key2",?"value2");

Bundle?bundleSerializable?=?new?Bundle();

bundleSerializable.putSerializable("serializable",?map2);

Intent?intentSerializable?=?new?Intent();

intentSerializable.putExtras(bundleSerializable);

intentSerializable.setClass(MainActivity.this,

SerializableActivity.class);

startActivity(intentSerializable);

3.2 接收參數

this.setTitle("Serializable例子");

//接收參數

Bundle?bundle?=?this.getIntent().getExtras();

//如果傳?LinkedHashMap,則bundle.getSerializable轉換時會報ClassCastException,不知道什么原因

//傳HashMap倒沒有問題。

HashMap?map?=??(HashMap)bundle.getSerializable("serializable");

String?sResult?=?"map.size()?="+map.size();

Iterator?iter?=?map.entrySet().iterator();

while(iter.hasNext())

{

Map.Entry?entry?=?(Map.Entry)iter.next();

Object?key?=?entry.getKey();

Object?value?=?entry.getValue();

sResult?+="\r\n?key---->?"+(String)key;

sResult?+="\r\n?value---->?"+(String)value;

}

4. 通過實現Parcelable接口

這個是通過實現Parcelable接口,把要傳的數據打包在里面,然后在接收端自己分解出來。這個是Android獨有的,在其本身的源碼中也用得很多,

效率要比Serializable相對要好。

4.1 首先要定義一個類,用于?實現Parcelable接口

因為其本質也是序列化數據,所以這里要注意定義順序要與解析順序要一致噢。

public?class?XclParcelable?implements?Parcelable?{

//定義要被傳輸的數據

public?int?mInt;

public?String?mStr;

public?HashMap?mMap?=?new?HashMap();

//Describe?the?kinds?of?special?objects?contained?in?this?Parcelable's?marshalled?representation.

public?int?describeContents()?{

return?0;

}

//Flatten?this?object?in?to?a?Parcel.

public?void?writeToParcel(Parcel?out,?int?flags)?{

//等于將數據映射到Parcel中去

out.writeInt(mInt);

out.writeString(mStr);

out.writeMap(mMap);

}

//Interface?that?must?be?implemented?and?provided?as?a?public?CREATOR?field

//that?generates?instances?of?your?Parcelable?class?from?a?Parcel.

public?static?final?Parcelable.Creator?CREATOR

=?new?Parcelable.Creator()?{

public?XclParcelable?createFromParcel(Parcel?in)?{

return?new?XclParcelable(in);

}

public?XclParcelable[]?newArray(int?size)?{

return?new?XclParcelable[size];

}

};

private?XclParcelable(Parcel?in)?{

//將映射在Parcel對象中的數據還原回來

//警告,這里順序一定要和writeToParcel中定義的順序一致才行!!!

mInt?=?in.readInt();

mStr??=?in.readString();

mMap??=?in.readHashMap(HashMap.class.getClassLoader());

}

public?XclParcelable()?{

//?TODO?Auto-generated?constructor?stub

}

}

4.2 ?設置參數

//通過實現Parcelable接口傳參的例子

Intent?intentParcelable?=?new?Intent();

XclParcelable?xp?=?new?XclParcelable();

xp.mInt?=?1;

xp.mStr?=?"字符串";

xp.mMap?=?new?HashMap();

xp.mMap.put("key",?"value");

intentParcelable.putExtra("Parcelable",?xp);

intentParcelable.setClass(MainActivity.this,

ParcelableActivity.class);

startActivity(intentParcelable);

4.3 接收參數

??????this.setTitle("Parcelable例子");

//接收參數

Intent?i?=?getIntent();

XclParcelable?xp?=?i.getParcelableExtra("Parcelable");

TextView??tv?=?(TextView)findViewById(R.id.tv);

tv.setText(??"?mInt?="+xp.mInt

+"\r\n?mStr"+xp.mStr

+"\r\n?size()="+xp.mMap.size());

5. 通過單例模式實現參數傳遞

單例模式的特點就是可以保證系統中一個類有且只有一個實例。這樣很容易就能實現,

在A中設置參數,在B中直接訪問了。這是幾種方法中效率最高的。

5.1 ?定義一個單實例的類

//單例模式

public?class?XclSingleton

{

//單例模式實例

private?static?XclSingleton?instance?=?null;

//synchronized?用于線程安全,防止多線程同時創建實例

public?synchronized?static?XclSingleton?getInstance(){

if(instance?==?null){

instance?=?new?XclSingleton();

}

return?instance;

}

final?HashMap?mMap;

private?XclSingleton()

{

mMap?=?new?HashMap();

}

public?void?put(String?key,Object?value){

mMap.put(key,value);

}

public?Object?get(String?key)

{

return?mMap.get(key);

}

}

5.2 設置參數

//通過單例模式傳參數的例子

XclSingleton.getInstance().put("key1",?"value1");

XclSingleton.getInstance().put("key2",?"value2");

Intent?intentSingleton?=?new?Intent();

intentSingleton.setClass(MainActivity.this,

SingletonActivity.class);

startActivity(intentSingleton);

5.3 接收參數

??????????this.setTitle("單例模式例子");

//接收參數

HashMap?map?=?XclSingleton.getInstance().mMap;

String?sResult?=?"map.size()?="+map.size();

//遍歷參數

Iterator?iter?=?map.entrySet().iterator();

while(iter.hasNext())

{

Map.Entry?entry?=?(Map.Entry)iter.next();

Object?key?=?entry.getKey();

Object?value?=?entry.getValue();

sResult?+="\r\n?key---->?"+(String)key;

sResult?+="\r\n?value---->?"+(String)value;

}

例子源碼放在:?下載

總結

以上是生活随笔為你收集整理的java数据传递给安卓_Android数据传递的五种方法汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色永久 | 少妇裸体性生交 | 99热香蕉| 免费av网站在线看 | 麻豆国产一区二区 | 免费国产黄色网址 | 99re视频这里只有精品 | 阿拉伯性视频xxxx | 少妇无套内谢免费视频 | 免费久久一级欧美特大黄 | 性欧美丰满熟妇xxxx性仙踪林 | 久久频 | 亚洲精品污 | 亚洲黄色一区 | 午夜插插| 中文字幕一区二区三区5566 | 韩国美女被c | 福利视频在线看 | 亚洲福利专区 | 日本成人免费在线视频 | 黄色一级片免费看 | 日女人网站 | 欧美日韩999 | 亚洲欧美综合一区 | 欧美综合激情 | 老头把女人躁得呻吟 | 日韩免费影视 | 日韩av在线播放一区 | 少妇又色又爽又高潮极品 | 淫五月| 国产免费91| 极品人妻一区二区三区 | 狠狠噜噜 | 精品1区2区 | 成人中文视频 | 活大器粗np高h一女多夫 | 日日噜噜夜夜狠狠久久波多野 | 911香蕉| 日本免费一区二区三区视频 | 国产三级三级三级三级三级 | www亚洲成人 | 亚洲精品乱码久久 | 天天爱天天干天天操 | 精品黄色 | 老女人性生活视频 | 无码人妻aⅴ一区二区三区有奶水 | 色综合天天综合网国产成人网 | 婷婷激情六月 | 成人免费视频网站在线看 | 爱爱视频在线免费观看 | 黄视频网站在线看 | 成人免费毛片嘿嘿连载视频 | 捆绑裸体绳奴bdsm亚洲 | 手机看片欧美日韩 | 丁香六月色婷婷 | 亚洲一本在线观看 | 超碰91人人 | 91免费在线视频观看 | 欧美美女爱爱视频 | 久久久久亚洲国产 | 精品一区二区三区三区 | 黑人精品欧美一区二区蜜桃 | 18精品爽国产白嫩精品 | 久久精品123 | 少女逼逼 | 久久久久久久久久久福利 | 国产做a视频 | 成av人片在线观看www | 欧美老熟妇乱xxxxx | 国产精品久久久爽爽爽麻豆色哟哟 | 人人搞人人 | 影音先锋在线看片资源 | 欧美第四页 | 国产三级三级三级 | 老司机伊人 | www香蕉视频 | 国内自拍偷拍 | 久久精品播放 | av久色| 妇女一级片 | 日韩无码专区 | 国产91精品一区二区麻豆亚洲 | 美女大黄网站 | 亚洲视频 一区 | 51av视频| 久久99热久久99精品 | 欧美sese| 久久婷婷六月 | 欧美精品一区二 | 香蕉视频性 | 国产大片一区 | 中文字幕第11页 | 爱爱一级 | 午夜影院男女 | 亚洲成人欧美 | 欧美成人小视频 | 国产白丝精品91爽爽久久 | 又粗又大又硬毛片免费看 | 国产精品一卡二卡 |