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效率高一点。

时间: 2024-10-02 17:38:30

Intent传递数据的方式的相关文章

Activity之间传递数据的方式及常见问题总结

转载请注明:大飞 http://blog.csdn.net/rflyee/article/details/47431633 Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) 5. 持久化(sqlite.share preference.file等) 一.通过intent传递数据 (1)直接传递,intent.putExtra(key, value

Intent传递数据

方式比较多,先看看代码,一会儿再总结. activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height=&quo

intent传递数据的二种方式startActivityForResult为什么不行?

============问题描述============ package com.example.intentsenddatademo; import java.util.List; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.content.Inten

Android---8---Intent及使用Intent传递数据

Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组 件想要执行的动作,还可以在不同组件之间传递数据.Intent 一般可被用于启动活动.启动 服务.以及发送广播等场景 Intent是一种运行时绑定机制,它能在程序运行的过程中连接两个不同的组件.通过intent 程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来请求. 在这些组件之间的通讯中,主要是由Intent协助完成的.Intent负责对应用中一次操作的动作

Android学习之Intent传递数据

Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据. 一.向下一个Activity传递数据主要是利用Intent作为“信使”来调用, 原Activity需要创建一个intent,并用putExtra(键,值)方法向intent中放入需要传递的信息,然后启动. public void onClick(View view){ String msg =

(四)ASP.NET MVC 中 Controller 给 View 传递数据的方式

1. ViewData: 以 ViewData["keyname"] = value 这样键值对的方式进行数据传送.在对应的 cshtml 中用 @ViewData["keyname"] 来获取值. 2. ViewBag: ViewBag 是 dynamic 类型的,是对 ViewData 的一人动态类型封装,用起来更方便,和 ViewData 共同操作一个数据 .在 Controller 中使用 ViewBag.keyname=value 来赋值,在 cshtml

Android 开发中使用Intent传递数据的方法

Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short[].int.int[].long.long[].float.float[].double.double[].String.String[],还有采用实现Serializable.Parcelable接口的类对象传递数据的两种方法:一种是Bundle.putSerializable(Key,Obje

intent传递数据和返回数据给上一个活动

startActivityForResult与startActivity的不同之处在于: 1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). 2.startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,

Android 消息广播Intent传递数据

1.创建布局文件activity_broadcast.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match