首页 > 代码库 > Intent传递数据的方式

Intent传递数据的方式

方式一:使用putExtra,在MainActivity中传输数据,在SecondActivity中输出数据:

package com.dystu.intentdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	}
	
	public void click(View view){
		String[] books = new String[]{"编程之美","剑指offer","数学之美"};
		Intent intent = new Intent(MainActivity.this, SecondActivity.class);
		intent.putExtra("name", "hanmeimei");
		intent.putExtra("isGirl", true);
		intent.putExtra("age", 28);
		intent.putExtra("books", books);
		startActivity(intent);
		
	}
	
}

package com.dystu.intentdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity {

	private String book;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		TextView tv = (TextView) findViewById(R.id.tv);
		
		String name = getIntent().getStringExtra("name");
		boolean isGirl = getIntent().getBooleanExtra("isGirl", false);
		int age = getIntent().getIntExtra("age", 0);
		
		String[] books = getIntent().getStringArrayExtra("books");
		
		for (String string : books) {
			System.out.println(string);
		}
		tv.setText("name:" + name +"\n" + "isGirl:" + isGirl + "\n"  + "age:" + age );
		
	}
}

可以看到putExtra所支持的数据类型是非常有限的,当传递一些自定义的对象时,putExtra就做不到了。

方式2:通过Serializable接口

Serializable是序列化的意思,表示将一个对象转换为可存储或者可传输的状态,序列化后的对象可以在网络上进行传输,也可以存储到本地。

比如:

package com.dystu.intentdemo;

import java.io.Serializable;

public class Person implements Serializable{
	
	private String name;
	
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	
	

}

package com.dystu.intentdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	}
	
	public void click(View view){
		Person person = new Person();
		person.setName("hanmeimei");
		person.setAge(28);
		Intent intent = new Intent(MainActivity.this, SecondActivity.class);
		intent.putExtra("person_data", person);
		startActivity(intent);
		
	}
	
}

package com.dystu.intentdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity {

	private String book;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		TextView tv = (TextView) findViewById(R.id.tv);
		
		
		Person person = (Person) getIntent().getSerializableExtra("person_data");
		
		
		tv.setText("name:" + person.getName() + "\n" + "age:" + person.getAge());
		
	}
}


通过getSerializableExtra既可以取出数据。

方式3:通过Parcelable接口

不同将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分是Intent所支持的类型。

如下:

package com.dystu.intentdemo;

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

public class Person implements Parcelable{
	
	private String name;
	
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(name);
		dest.writeInt(age);
	}
	
	public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
		
		@Override
		public Person[] newArray(int size) {
			return new Person[size];
		}
		
		@Override
		public Person createFromParcel(Parcel source) {
			
			Person person = new Person();
			
			person.name = source.readString();
			
			person.age = source.readInt();
			
			
			
			return person;
		}
	};
	

}

MainActivity的代码不变。

package com.dystu.intentdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity {

	private String book;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		TextView tv = (TextView) findViewById(R.id.tv);
		
		
		Person person = (Person) getIntent().getParcelableExtra("person_data");
		
		
		tv.setText("name:" + person.getName() + "\n" + "age:" + person.getAge());
		
	}
}


Parcelable效率高一点。

Intent传递数据的方式