5.使用Intent实现Activity之间对象的传输
2017-05-15 22:28
501 查看
由于前面写了Intent,就一起写,这个是Intent的高级使用,可以不看先
通常有两种实现方式
1.Serializable 序列化对象,将对像转换成可传输的状态,比如二进制。
具体代码:
接下来看看主函数
再看看要接收的改动对象的Activity
2.Parcelable方式
原理:将对象分解成很多部分,所有的部分都是Intent所支持传输的数据类型,其实解析,再组合出来,都是在Person类中进行的,所以在前面的基础上,实现一个Parcelable接口,复写一些方法,就可以了,那些复写的方法就是用来传输时解析对象,组合对象用的,
看Person类代码:
MainAcitvity中代码不变,
那在SecondActivity中取对象怎么取???
总结:第一种方法简单,但是第二种在性能上有优势
通常有两种实现方式
1.Serializable 序列化对象,将对像转换成可传输的状态,比如二进制。
具体代码:
先看看要被传输的对象的类Person
//实现了这个接口后,就是通知了系统,该类的实例可以被序列化 public class Person implements Serializable{ private String name; private int age; public Person (String name,int age){ this.name=name; this.age=age; } public void setName(String name){ this.name=name; } public void setAge(int age){ this.age=age; } public String getName(){ return name; } public int getAge(){ return age; } }
接下来看看主函数
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendDate=(Button)findViewById(R.id.sendDate); sendDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //初始化person Person person=new Person("lee",19); Intent intent =new Intent(MainActivity.this,SecondActivity.class); //向SecondActivity传递person实例,将对象存在Intent中,key为lee intent.putExtra("lee",person); startActivity(intent); } });
再看看要接收的改动对象的Activity
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); //取出对象 Person person=(Person)getIntent().getSerializableExtra("lee"); //测试有没有取出 Log.d("ssssss",person.getName()+"\t"+person.getAge()); } }
2.Parcelable方式
原理:将对象分解成很多部分,所有的部分都是Intent所支持传输的数据类型,其实解析,再组合出来,都是在Person类中进行的,所以在前面的基础上,实现一个Parcelable接口,复写一些方法,就可以了,那些复写的方法就是用来传输时解析对象,组合对象用的,
看Person类代码:
//实现Parcelable接口 public class Person implements Parcelable{ private String name; private int age; public Person (String name,int age){ this.name=name; this.age=age; } public void setName(String name){ this.name=name; } public void setAge(int age){ this.age=age; } public String getName(){ return name; } public int getAge(){ return age; } //复写该方法用来进行数据的写出,存到dest中 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } //默认要复写的,一般返回0就好 @Override public int describeContents() { return 0; } //还必须要提供一个CREATOR常量,注意泛型都是要传输的对象类 //这里用了个接口的实现,在里面对数据读出来,并返回对象 public static final Parcelable.Creator<Person> CREATOR=new Parcelable.Creator<Person>(){ @Override public Person createFromParcel(Parcel source) { //由于前面先写入的是name,这里必须先读取 String name=source.readString(); int age=source.readInt(); Person person=new Person(name,age); return person; } //这里按要求复写就好 @Override public Person[] newArray(int size) { return new Person[size]; } }; }
MainAcitvity中代码不变,
那在SecondActivity中取对象怎么取???
//取出对象 Person person=(Person)getIntent().getParcelableExtra("lee");
总结:第一种方法简单,但是第二种在性能上有优势
相关文章推荐
- 使用Intent对象来实现两个(或多个)Activity之间的跳转,并实现在Activity之间传递参数。
- 使用Intent实现Activity之间传值与跳转
- 用Intent 对象实现两个(多个)Activity之间的跳转和参数传递
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable] .
- Android使用Intent实现Activity之间的跳转
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- 使用Intent实现activity之间的数据传递
- 使用Serializable和Parcelable实现在activity之间的传输
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法
- 【Android】使用Intent实现Activity之间的跳转(创建一个Activity的过程)
- 借助Intent实现Android工程中Activity之间Java对象的传递——实现Parcelable接口
- Android 使用intent.putExtra实现Activity之间的参数传递
- android 开发手记 activity 之间数据的传递 intent 对象的使用
- 在两个activity之间使用intent传递list类型的对象
- 借助Intent实现Android工程中Activity之间Java对象的传递——实现Serializable接口
- 安卓开发之如何利用Intent对象,实现Activity和另一个Activity之间的跳转
- 安卓--使用Intent实现Activity之间传值与跳转
- Android使用Intent在Activity之间传递对象[Serializable或者Parcelable]