android 之对象传递
16lz
2021-01-23
在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");
结果图:
更多相关文章
- [转]SimpleCursorAdapter类与数据绑定
- Android音视频 - Camera+AudioRecord采集数据
- 抖音数据采集教程,Android群控黑盒调用,Sekiro使用手册
- [Android]使用Spring for Android改善数据交互流程
- 构建自己的Android代码托管服务器
- 打造android ORM框架opendroid(七)——数据库升级方案