android 之对象传递

来源:互联网 发布:mac涂层脱落 编辑:程序博客网 时间:2024/05/16 06:45

在android 的Activity 中,两个Activity 中对象的传递。

通常我们使用意图来启动另一个Activity.如》 Intent intent = new Intent(MainActivity.this,OtherActivity.class);

如果在两个Activity中传递数据就需要用到一个对象 Bundle bun = new Bundle();

我们可以把Bundle 理解成一个容器,类似于map这样的东西。把"普通"对象放到里边,然后就可以在另一个Activity中获取该对象.

比方说:

              bun.putString("name","华仔");      bun.putInt("age", 18);
而在另一个Activity 中就可以用。    

   Intent intent = this.getIntent();   String name = intent.getStringExtra("name");
就可以获取到值。这里所说的普通对象。

那么自定义对象在android中应该怎么实现呢。

我记得在java语言中。如果对象网络上传输就得实现序列化。自定义类需要实现 java.io.Serializable.

而在android 的应用中这样的方法同样可行代码如下。

package com.hkrt.domain;/**person 实体*/public class Person implements java.io.Serializable {private static final long serialVersionUID = -1115440875848739771L;private int id;private String name;private double money;public Person(String name, double money) {super();this.name = name;this.money = money;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}@Overridepublic String toString() {return "Person [id=" + id + ", money=" + money + ", name=" + name + "]";}}

在android 中代码就可以用

 Person per = new Person("张三",5896.20); bun.putSerializable("person", per);
进行数据传递。

在另一个Activity 中就可以这样获取了。

Bundle  bun =  intent.getExtras();Person per =(Person)bun.getSerializable("person");

第二种方法。就是自定义数据对象实现 android.os.Parcelable。译为:包裹

同样可以理解成容器。代码如下:

package com.hkrt.domain;import android.os.Parcel;import android.os.Parcelable;public class Student implements android.os.Parcelable {private String name;private int age;private double score;public Student() {super();}public Student(Parcel parcel) {name = parcel.readString();age = parcel.readInt();score = parcel.readDouble();}public Student(String name, int age, double score) {super();this.name = name;this.age = age;this.score = score;}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;}public double getScore() { return score;}public void setScore(double score) {this.score = score;}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel parcel, int flags) {parcel.writeString(name);parcel.writeInt(age);parcel.writeDouble(score);} public static final Parcelable.Creator<Student> CREATOR  = new Parcelable.Creator<Student>() { public Student createFromParcel(Parcel in) {     return new Student(in); } public Student[] newArray(int size) {     return new Student[size]; }};}
官方解释如下:

nterface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface.

在android 的代码就可以这样写了。

   Student stu = new Student("李四", 20, 100.00);   bun.putParcelable("stu", stu);
而在另一个Activity中就可以获取到这个自定义对象Student.

Student stu = (Student)bun.getParcelable("stu");

结果图:





原创粉丝点击