1. 程式人生 > >Android Intent引數傳遞,包括物件複雜集合等多方式傳遞

Android Intent引數傳遞,包括物件複雜集合等多方式傳遞

用Intent傳遞資料的時候,如果傳遞的是基本型別,不用說很容易,單個的就是單個的傳,多個就用bundle傳遞,如果傳遞的是物件或者是集合,簡單的某個集合還是可以直接傳的,但是大多數的是不可以傳的。在傳遞物件的時候有兩種方式,一種是實現Parcelable或者Serializable介面序列化物件來傳遞,在傳集合的時候,可能是通過簡單的集合巢狀複雜的集合進行傳遞,但是這些方式都非常的麻煩、複雜,待會我會介紹一種方便簡單的方式。

第一種方式:實現Parcelable或者Serializable介面序列化物件來傳遞

Student實體實現介面Serializable的程式碼

package com.jky.activityparams;

import java.io.Serializable;

//Serializable 標記介面,標記這個類的例項可以被序列化
public class Student implements Serializable {

	public String name;
	public int age;
	public boolean isSingle = false;

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", isSingle="
				+ isSingle + "]";
	}

}

Friend實體實現介面Parcelable的程式碼

package com.jky.activityparams;

import android.os.Parcel;
import android.os.Parcelable;

//實現Parcelable的物件還可以用於垮程序傳輸
//可以用於Java與C++之間的傳輸
//QQ知道QQ音樂播放的當前歌曲
public class Friend implements Parcelable {

	public String name;
	public int age;
	public boolean gender;

	public Friend(String name, int age, boolean gender) {
		super();
		this.name = name;
		this.age = age;
		this.gender = gender;
	}

	//必須要有這個靜態屬性
	public static final Parcelable.Creator<Friend> CREATOR = new Parcelable.Creator<Friend>() {
		// 讀
		public Friend createFromParcel(Parcel in) {
			// 按照寫的順序讀取
			String name = in.readString();
			int age = in.readInt();
			int g = in.readInt();
			boolean gender = false;
			if (g == 1) {
				gender = true;
			}
			return new Friend(name, age, gender);
		}

		// 便捷方法,快速的建立一個空的陣列
		public Friend[] newArray(int size) {
			return new Friend[size];
		}
	};

	// 返回0,描述物件是什麼內容
	@Override
	public int describeContents() {
		return 0;
	}

	// 寫的方法
	// writeToParcel實際傳遞的是Parcel
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		// 寫物件的屬性
		dest.writeString(this.name);
		dest.writeInt(this.age);
		if (this.gender) {
			dest.writeInt(1);
		} else {
			dest.writeInt(0);
		}
	}

	@Override
	public String toString() {
		return "Friend [name=" + name + ", age=" + age + ", gender=" + gender
				+ "]";
	}

}

傳遞方的Activity程式碼,這裡可以不是Activity,這裡的demo寫的是Activity
public void jump(View btn){
	//跳轉到SecondActivity
	//顯示意圖
	Intent intent = new Intent(this, SecondActivity.class);
		
	//Activity之間傳遞引數
	//1.單個引數
	//intent.putExtra("name", "許肖華");
		
	//2.多個引數
	/*Bundle data = new Bundle();
	data.putString("name", "蔣春梅");
	data.putInt("age", 18);
	data.putBoolean("isSingle", false);
	intent.putExtra("data", data);*/
		
	//3.傳遞Serializable物件
	/*Student s = new Student("蔣春梅",18);
	intent.putExtra("data", s);*/
		
	//4.傳遞parcelable物件
	//好處:序列化的效率更高
	Friend f = new Friend("袁丁",18,false);
	intent.putExtra("data", f);
	startActivity(intent);
}

接收方的程式碼
	//獲取傳遞的引數
	Intent intent = getIntent();
		
	//1.
	/*String name = intent.getStringExtra("name");
	Log.d("geek", name);*/
	
	//2.Bundle
	/*Bundle data = intent.getBundleExtra("data");
	String name = data.getString("name");
	Log.d("geek", name);*/
		
	//3.Serializable物件
	/*Student s = (Student)intent.getSerializableExtra("data");
	Log.d("geek", s.toString());*/
		
	//4.parcelable物件 
	Friend f = intent.getParcelableExtra("data");
	Log.d("geek", f.toString());
第一種方式就是這樣通過序列化的方式實現物件的傳遞,供大家瞭解,接下來將介紹第二種簡單的方式

第一種方式:通過繼承Application類

在子類中定義公共變數

/***用於物件的傳遞 傳遞完了記得Remove掉*/
public Map<String, Object> datas = new HashMap<>();
傳遞方
EntityTest entityTest = new EntityTest();		
caHyApplication1.datas.put("entityTest",entityTest);	
接收方
EntityTest entityTest = (EntityTest) caHyApplication.datas.get(name);

獲取到資料之後要記的
caHyApplication.datas.remove(name);

集合物件都可以通過這種方式,因為Application的生命週期是最長的,而且是單例模式。

相關推薦

Android Intent引數傳遞包括物件複雜集合多方式傳遞

用Intent傳遞資料的時候,如果傳遞的是基本型別,不用說很容易,單個的就是單個的傳,多個就用bundle傳遞,如果傳遞的是物件或者是集合,簡單的某個集合還是可以直接傳的,但是大多數的是不可以傳的。在傳遞物件的時候有兩種方式,一種是實現Parcelable或者Seriali

一個簡單的Android Intent使用例項包括顯式/隱式2種呼叫

最近又開始接觸了一下Android,準備將每次寫的小Demo都在這裡備份一下,以防以後忘記了,Demo相對來說都比較簡單,內容也比較片面。今天主要就是練習了一下intent的使用,主要涉及到的知識點有:intent傳值,隱式呼叫。 1.傳值: 傳送端:intent.putE

[iOS]關於 App 混合(Hybrid)開發的優化包括H5、Weex(本篇博客主要針對 iOS 應用講解但該思想同樣適用於Android

color 數據 後臺 lib 新版 生成 下載地址 代碼 版本   我們知道混合開發,可以節省很多成本(時間成本,經濟成本等等),所以有很多公司比較鐘愛這種開發形式,今天所講的優化方式,也是我在我們公司的應用中實際用了的,而且我寫的這個優化的 SDK 已經開源到 gith

JAVA基礎-6.二維陣列傳遞面向物件

1:二維陣列(理解) (1)元素是一維陣列的陣列。 (2)格式: A:資料型別[][] 陣列名 = new 資料型別[m][n]; m:表示這個二維陣列有多少個一維陣列。 n:表示每一個一維陣列的元素有多少個。

android本地、sd卡儲存物件集合以及讀取該物件

<!-- 在SDCard中建立與刪除檔案的許可權 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

關於android 圓角的問題包括圓角Imageview的顯示問題。

開發中經常會遇到需要圓角的問題。我們解決的途徑無非就是幾種: 1.自定義圓角view。 2.Glide載入圓角。 3.寫drawable的shape檔案來定義圓角資原始檔。 4.控制元件的背景用設計切的圓角圖片替代。 這裡討論情況1,3 遇到的問題,如下: 1.自

Android螢幕適配包括全面屏適配自定義適配

在此處列出一些簡單的配置圖                 點選下載配置檔案               //文件就在下邊,不用下載 原理:  1. px是解析度的單位 比如現在主流手機解析度1080*1920.    2. dp是安卓開發

畫一個乘坐地鐵的流程圖從購票到搭乘地鐵的過程包括安檢、購票(網易-2013)

中轉 人工 路線 提示 但是 情況 -a 公交 四種 (1)安檢 作用:防止乘客攜帶危險物品上車,包括汽油、刀類等,保障公共安全。 需要考慮乘客分類:1)有包的乘客:需要接受安檢。 2)無包的乘客:直接通行,可略過此步驟。當然,特殊時期(警備要求特別高),有時候會對每一個乘

C#+AE地圖文件的相關操作包括新建開啟儲存

public static bool NewMxdFile(string filePath)//新建工作空間 { try { string tmp_fileName = fileP

【原創】可修改==不可做index/key可下標==有index/key==可查詢:嘗試 list tuple dict set的巢狀包括str 和 int

語法總結 1 再確認一次,在語言使用時 "string " 等同於 'string'  沒區別 2 無論tuple ,list , dict 本身是用不同的符號() [ ] {},但是引用 index/key 都使用 [ ]     tuple

Jsp頁面傳Json資料到服務端物件集合進行資料處理

需求:1、將頁面資料帶到服務端並轉成物件,2、將頁面的集合資料帶到服務端轉List 實現:用ajax請求傳遞資料,資料格式為json JS方法: testJsonMethod = function(

iOS10訪問許可權的配置(解決訪問奔潰問題包括相簿/相機

這裡僅以相簿的為例: plist檔案裡面新增,Privacy - Photo Library Usage Description,Value值為描述,彈出的提示框會顯示出來。 修改plist 升到iOS10之後,需要設定許可權的有: 麥克風許可權:Privac

AndroidIntent傳遞自定義物件型別的資料

Android中Intent是用來實現元件之間的通訊的,可以在元件之間傳遞資料。可以傳遞一些基本型別的資料,也可以傳遞自定義物件型別的資料,但是如果要傳遞自定義型別的物件資料,這個自定義型別的物件必須是實現了Serializable介面或者是實現Parcelab

Jersey使用總結一(jersey初步使用和簡單post請求幾種引數傳遞String方式不含物件操作)

首先說明一下,jersey是幹什麼的呢,我個人的理解就是類似於一種webservice技術或框架 jersey-rest為service端,其它的jersey請求為客戶端,客戶端傳送一個請求(帶參或不帶參)呼叫service端的方法,方法返回結果給客戶端。 如以下使用步奏

Java傳遞基本型別:值傳遞物件作為引數:引用傳遞

值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。 引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方

android intent傳遞物件集合

傳遞物件 Article article =JsonUtils.getArticle(content); intent =newIntent(activity,Compositi

《老羅Android第二季》wifi、Intent傳遞自定義物件

1. Wifi 的操作  掃描wifi的情況,並判斷是否連線。 在佈局檔案中,加入一個開關按鈕: <Switch android:id="@+id/switch1" android:layout_width="wrap_content"

Android 批量設定監聽器監聽器傳遞引數重寫監聽器建構函式

這個問題困擾了我好幾天,就在我做的課程表應用中,每個頁面有15個TextView,每個都要設定監聽器,但是這還不是難事,難的是,用匿名內部類實現監聽藉口的時候,還要再在裡面設定監聽器!簡而言之,TextView長按變為EditText,EditText點選完成之後把值傳回T

js 與 android 的互動(方法互呼叫) 和android向 js傳遞 js向android引數 事件攔截看上一篇

mail_detail_v2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewpor

android intent 傳遞list 或 物件 (轉)

當然這些Object是有一定的條件的,前者是實現了Serializable介面,而後者是實現了Parcelable介面 方法四: 用intent傳來傳去 覺得不方便 我們可以寫一個在application裡面的全域性資料  1、建立一個屬於你自己的android.app.Application的子類  2、在