Android 将对象数据从一个活动传输到另一个活动
我的EmployeeInfo课程如下:Android 将对象数据从一个活动传输到另一个活动,android,Android,我的EmployeeInfo课程如下: public class EmployeeInfo { private int id; // Employee ID private String name; // Employee Name private int age;// Employee Age public int getEmployeeID() { return id; }
public class EmployeeInfo {
private int id; // Employee ID
private String name; // Employee Name
private int age;// Employee Age
public int getEmployeeID() {
return id;
}
public void setEmployeeID(int id) {
this.id = id;
}
public String getEmployeeName() {
return name;
}
public void setEmployeeName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age= age;
}
}
ArrayList<EmployeeInfo> employeeInfo object contains the emplyoyee info data for multiple employees.
我想将数据数组列表employeeInfo从Activity1传输到Activity2
使用Parcelable是将数据从Activity1传输到Activity2的唯一方法吗?
如果没有,还有什么选择
如果是,请提供Parcelable的原型代码以及如何将对象数据从Activity1传输到Activity2的示例代码。您只需让EmployeeInfo类实现序列化即可。或者你可以像这样发送数据
intent.putExtra("id", employInfo.getEmployeeID());
intent.putExtra("name", employInfo.getEmployeeName());
intent.putExtra("age", employInfo.getAge());
如果需要传输自定义类的列表,我将使用第一种方法。所以您可以将整个列表设置为可序列化。
然而,他们说每个人都应该使用Parcelable,因为它更快。Tbh,我从未使用过它,因为它需要更多的努力,而且我怀疑有人能意识到常规应用程序在速度上的差异,而不需要通过intent发送大量数据。你可以简单地让EmployeeInfo类实现可序列化。或者你可以像这样发送数据
intent.putExtra("id", employInfo.getEmployeeID());
intent.putExtra("name", employInfo.getEmployeeName());
intent.putExtra("age", employInfo.getAge());
如果需要传输自定义类的列表,我将使用第一种方法。所以您可以将整个列表设置为可序列化。
然而,他们说每个人都应该使用Parcelable,因为它更快。Tbh,我从未使用过它,因为它需要更多的努力,而且我怀疑有人能意识到在常规应用程序中,通过intent发送大量数据时速度的差异。以下是我对Parcelable的实现:
public class ProfileData implements Parcelable {
private int gender;
private String name;
private String birthDate;
public ProfileData(Parcel source) {
gender = source.readInt();
name = source.readString();
birthDate = source.readString();
}
public ProfileData(int dataGender, String dataName, String dataBDate) {
gender = dataGender;
name = dataName;
birthDate = dataBDate;
}
// Getters and Setters are here
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(gender);
out.writeString(name);
out.writeString(birthDate);
}
public static final Parcelable.Creator<ProfileData> CREATOR
= new Parcelable.Creator<ProfileData>() {
public ProfileData createFromParcel(Parcel in) {
return new ProfileData(in);
}
public ProfileData[] newArray(int size) {
return new ProfileData[size];
}
并获取数据:
Bundle data = getIntent().getExtras();
ProfileData profile = data.getParcelable("profile_details");
以下是我对Parcelable的实现:
public class ProfileData implements Parcelable {
private int gender;
private String name;
private String birthDate;
public ProfileData(Parcel source) {
gender = source.readInt();
name = source.readString();
birthDate = source.readString();
}
public ProfileData(int dataGender, String dataName, String dataBDate) {
gender = dataGender;
name = dataName;
birthDate = dataBDate;
}
// Getters and Setters are here
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(gender);
out.writeString(name);
out.writeString(birthDate);
}
public static final Parcelable.Creator<ProfileData> CREATOR
= new Parcelable.Creator<ProfileData>() {
public ProfileData createFromParcel(Parcel in) {
return new ProfileData(in);
}
public ProfileData[] newArray(int size) {
return new ProfileData[size];
}
并获取数据:
Bundle data = getIntent().getExtras();
ProfileData profile = data.getParcelable("profile_details");
好问题。查看文档并进行扶手椅编码: 可以通过调用putExtrasBundle和myBundle.putSerializable在活动之间传递对象。对象和整个对象树需要实现可序列化 日航 编辑:答案是肯定的: 可以通过调用putExtrasBundle和myBundle.putSerializable在活动之间传递不可变对象。对象和整个对象树需要实现可序列化。这是面向对象编程的基本原则,即传递有状态消息 首先,我们通过声明一个新类来创建不可变对象:
package jalcomputing.confusetext;
import java.io.Serializable;
/*
* Immutable messaging object to pass state from Activity Main to Activity ManageKeys
* No error checking
*/
public final class MainManageKeysMessage implements Serializable {
private static final long serialVersionUID = 1L;
public final int lengthPassword;
public final long timeExpire;
public final boolean isValidKey;
public final int timeoutType;
public MainManageKeysMessage(int lengthPassword, long timeExpire, boolean isValidKey, int timeoutType){
this.lengthPassword= lengthPassword;
this.timeExpire= timeExpire;
this.isValidKey= isValidKey;
this.timeoutType= timeoutType;
}
}
然后,我们在父活动中创建该类的一个不可变有状态实例,即消息,并按如下所示的意图发送它:
private void LaunchManageKeys() {
Intent i= new Intent(this, ManageKeys.class); // no param constructor
// push data (4)
MainManageKeysMessage message= new MainManageKeysMessage(lengthPassword,timeExpire,isValidKey,timeoutType);
Bundle b= new Bundle();
b.putSerializable("jalcomputing.confusetext.MainManageKeysMessage", message);
i.putExtras(b);
startActivityForResult(i,REQUEST_MANAGE_KEYS); // used for callback
}
最后,我们在子活动中检索对象
try {
inMessage= (MainManageKeysMessage) getIntent().getSerializableExtra("jalcomputing.confusetext.MainManageKeysMessage");
lengthPassword= inMessage.lengthPassword;
timeoutType= inMessage.timeoutType;
isValidKey= inMessage.isValidKey;
timeExpire= inMessage.timeExpire;
} catch(Exception e){
lengthPassword= -1;
timeoutType= TIMEOUT_NEVER;
isValidKey= true;
timeExpire= LONG_YEAR_MILLIS;
}
好问题。查看文档并进行扶手椅编码: 可以通过调用putExtrasBundle和myBundle.putSerializable在活动之间传递对象。对象和整个对象树需要实现可序列化 日航 编辑:答案是肯定的: 可以通过调用putExtrasBundle和myBundle.putSerializable在活动之间传递不可变对象。对象和整个对象树需要实现可序列化。这是面向对象编程的基本原则,即传递有状态消息 首先,我们通过声明一个新类来创建不可变对象:
package jalcomputing.confusetext;
import java.io.Serializable;
/*
* Immutable messaging object to pass state from Activity Main to Activity ManageKeys
* No error checking
*/
public final class MainManageKeysMessage implements Serializable {
private static final long serialVersionUID = 1L;
public final int lengthPassword;
public final long timeExpire;
public final boolean isValidKey;
public final int timeoutType;
public MainManageKeysMessage(int lengthPassword, long timeExpire, boolean isValidKey, int timeoutType){
this.lengthPassword= lengthPassword;
this.timeExpire= timeExpire;
this.isValidKey= isValidKey;
this.timeoutType= timeoutType;
}
}
然后,我们在父活动中创建该类的一个不可变有状态实例,即消息,并按如下所示的意图发送它:
private void LaunchManageKeys() {
Intent i= new Intent(this, ManageKeys.class); // no param constructor
// push data (4)
MainManageKeysMessage message= new MainManageKeysMessage(lengthPassword,timeExpire,isValidKey,timeoutType);
Bundle b= new Bundle();
b.putSerializable("jalcomputing.confusetext.MainManageKeysMessage", message);
i.putExtras(b);
startActivityForResult(i,REQUEST_MANAGE_KEYS); // used for callback
}
最后,我们在子活动中检索对象
try {
inMessage= (MainManageKeysMessage) getIntent().getSerializableExtra("jalcomputing.confusetext.MainManageKeysMessage");
lengthPassword= inMessage.lengthPassword;
timeoutType= inMessage.timeoutType;
isValidKey= inMessage.isValidKey;
timeExpire= inMessage.timeExpire;
} catch(Exception e){
lengthPassword= -1;
timeoutType= TIMEOUT_NEVER;
isValidKey= true;
timeExpire= LONG_YEAR_MILLIS;
}
还有另一种方法来传输对象。我们可以使用应用程序来传输对象,在我看来,这是一种更好的方法 首先,在主包中创建自定义应用程序
public class TestApplication extends Application {
private Object transferObj;
@Override
public void onCreate() {
super.onCreate();
// ACRA.init(this);
}
public Object getTransferObj() {
return transferObj;
}
public void setTransferObj(Object transferObj) {
this.transferObj = transferObj;
}
}
现在使用setTransfer和get transfer方法将对象从一个活动移动到另一个活动,如:
转让:
((TestApplication) activity.getApplication()).setTransferObj(Yous object);
ToRecieve:
Object obj=((TestApplication) activity.getApplication()).getTransferObj();
注
始终记住在清单应用程序标记中输入此应用程序:
<application
android:name=".TestApplication">
</application>
还有另一种方法来传输对象。我们可以使用应用程序来传输对象,在我看来,这是一种更好的方法 首先,在主包中创建自定义应用程序
public class TestApplication extends Application {
private Object transferObj;
@Override
public void onCreate() {
super.onCreate();
// ACRA.init(this);
}
public Object getTransferObj() {
return transferObj;
}
public void setTransferObj(Object transferObj) {
this.transferObj = transferObj;
}
}
现在使用setTransfer和get transfer方法将对象从一个活动移动到另一个活动,如:
转让:
((TestApplication) activity.getApplication()).setTransferObj(Yous object);
ToRecieve:
Object obj=((TestApplication) activity.getApplication()).getTransferObj();
注
始终记住在清单应用程序标记中输入此应用程序:
<application
android:name=".TestApplication">
</application>
您可以使用Gson或Jakson将对象转换为jsonstring,使用intent作为字符串传递,并在另一个活动中读取json。您可以使用Gson或Jakson将对象转换为jsonstring,使用intent作为字符串传递,并在另一个活动中读取json
try {
inMessage= (MainManageKeysMessage) getIntent().getSerializableExtra("jalcomputing.confusetext.MainManageKeysMessage");
lengthPassword= inMessage.lengthPassword;
timeoutType= inMessage.timeoutType;
isValidKey= inMessage.isValidKey;
timeExpire= inMessage.timeExpire;
} catch(Exception e){
lengthPassword= -1;
timeoutType= TIMEOUT_NEVER;
isValidKey= true;
timeExpire= LONG_YEAR_MILLIS;
}