Android 在活动之间传递对象
我正在开发一个由多个活动组成的Android应用程序,我必须在它们之间传递ab对象,但我不能使用intents传递它,因为对象的类没有实现serializable,我该怎么做? 我无法修改类的源代码 谢谢:)Android 在活动之间传递对象,android,android-activity,Android,Android Activity,我正在开发一个由多个活动组成的Android应用程序,我必须在它们之间传递ab对象,但我不能使用intents传递它,因为对象的类没有实现serializable,我该怎么做? 我无法修改类的源代码 谢谢:) 此代码可能会帮助您: public class EN implements Serializable { //... you don't need implement any methods when you implements Serializable } 第一个活动 EN enum
此代码可能会帮助您:
public class EN implements Serializable {
//... you don't need implement any methods when you implements Serializable
}
第一个活动
EN enumb = new EN();
Intent intent = new Intent(getActivity(), NewActivity.class);
intent.putExtra("en", enumb); //second param is Serializable
startActivity(intent);
保密性
Bundle extras = getIntent().getExtras();
if (extras != null) {
en = (EN)getIntent().getSerializableExtra("en"); //Obtaining data
}
此代码可能会帮助您:
public class EN implements Serializable {
//... you don't need implement any methods when you implements Serializable
}
第一个活动
EN enumb = new EN();
Intent intent = new Intent(getActivity(), NewActivity.class);
intent.putExtra("en", enumb); //second param is Serializable
startActivity(intent);
保密性
Bundle extras = getIntent().getExtras();
if (extras != null) {
en = (EN)getIntent().getSerializableExtra("en"); //Obtaining data
}
您需要实现parcelable,然后通过intent传递它。不要使用可序列化,因为它比可打包慢得多 在此处阅读如何使您的对象可包裹: 在你不这样做之后,像这样传递你的物体:
intent.putExtra("KEY", your_object);
阅读:
getIntent().getExtras().getParcelable("KEY");
您需要实现parcelable,然后通过intent传递它。不要使用可序列化,因为它比可打包慢得多 在此处阅读如何使您的对象可包裹: 在你不这样做之后,像这样传递你的物体:
intent.putExtra("KEY", your_object);
阅读:
getIntent().getExtras().getParcelable("KEY");
首先,创建包裹数据模型
public class DataModel implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<DataModel> CREATOR
= new Parcelable.Creator<DataModel>() {
public DataModel createFromParcel(Parcel in) {
return new DataModel(in);
}
public DataModel[] newArray(int size) {
return new DataModel[size];
}
};
private DataModel(Parcel in) {
mData = in.readInt();
}
从意图中获取对象
object = getIntent().getExtras().getParcelable("KEY");
首先,创建包裹数据模型
public class DataModel implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<DataModel> CREATOR
= new Parcelable.Creator<DataModel>() {
public DataModel createFromParcel(Parcel in) {
return new DataModel(in);
}
public DataModel[] newArray(int size) {
return new DataModel[size];
}
};
private DataModel(Parcel in) {
mData = in.readInt();
}
从意图中获取对象
object = getIntent().getExtras().getParcelable("KEY");
假设有一个名为StudentDataObject的数据对象类具有某些数据类型
StudentDataObject studentDataObject = new StudentDataObject();
Gson gson = new Gson();
String studentDataObjectAsAString = gson.toJson(studentDataObject);
现在我们使用intent将它从一个活动传递到另一个活动
Intent intent = new Intent(FromActivity.this, ToActivity.class);
intent.putExtra("MyStudentObjectAsString", studentDataObjectAsAString);
startActivity(intent);
现在我们在新的活动中,我们使用下面的行来获取该对象
Gson gson = new Gson();
String studentDataObjectAsAString = getIntent().getStringExtra("MyStudentObjectAsString");
StudentDataObject studentDataObject = gson.fromJson(studentDataObjectAsAString, StudentDataObject.class);
活动本身知道从何处调用我,因此我们可以直接编写getIntent()方法
这里我们只需要添加一个依赖项GSON,我们可以使用build.gradle文件中的以下行添加它
compile 'com.google.code.gson:gson:2.6.2'
一件事是将StudentDataObject实现为一个可包裹的,如果显示错误,只需按alt+Enter并实现方法。
试试这一次,希望能奏效
StudentDataObject的示例如下:-
public class StudentDataObject implements Parcelable {
// fields
//empty constructor
//parameterised constructor
//getters and setters
//toString method
//last implement some Parcelable methods
}
假设有一个名为StudentDataObject的数据对象类具有某些数据类型
StudentDataObject studentDataObject = new StudentDataObject();
Gson gson = new Gson();
String studentDataObjectAsAString = gson.toJson(studentDataObject);
现在我们使用intent将它从一个活动传递到另一个活动
Intent intent = new Intent(FromActivity.this, ToActivity.class);
intent.putExtra("MyStudentObjectAsString", studentDataObjectAsAString);
startActivity(intent);
现在我们在新的活动中,我们使用下面的行来获取该对象
Gson gson = new Gson();
String studentDataObjectAsAString = getIntent().getStringExtra("MyStudentObjectAsString");
StudentDataObject studentDataObject = gson.fromJson(studentDataObjectAsAString, StudentDataObject.class);
活动本身知道从何处调用我,因此我们可以直接编写getIntent()方法
这里我们只需要添加一个依赖项GSON,我们可以使用build.gradle文件中的以下行添加它
compile 'com.google.code.gson:gson:2.6.2'
一件事是将StudentDataObject实现为一个可包裹的,如果显示错误,只需按alt+Enter并实现方法。
试试这一次,希望能奏效
StudentDataObject的示例如下:-
public class StudentDataObject implements Parcelable {
// fields
//empty constructor
//parameterised constructor
//getters and setters
//toString method
//last implement some Parcelable methods
}
扩展类并在继承的类中实现serializable或parcelable,并像在其他答案中一样使用其对象
Class NewClass extends MyClass implements serializable {
//Create a constructor matching super
}
使用该类的对象而不是我的类扩展该类,在继承的类中实现可序列化或可打包,并像在其他答案中一样使用其对象
Class NewClass extends MyClass implements serializable {
//Create a constructor matching super
}
使用该类的对象而不是我的类这是我的对象类Book.java
现在,对象将在ReceivingActivity.java中像这样被接收
这是我的对象类Book.java
现在,对象将在ReceivingActivity.java中像这样被接收
您可以通过两种方式将自定义对象从一个活动传递到另一个活动
public class Note implements Serializable {
private int id;
private String title;
}
(2) 通过实现包裹(您必须按照包裹的书写和阅读顺序进行操作)
活动B
Note note = (Note) getIntent().getExtras().get("NOTE");
Imp:Parcelable比Serializable快10倍您可以通过两种方式将自定义对象从一个活动传递到另一个活动
public class Note implements Serializable {
private int id;
private String title;
}
(2) 通过实现包裹(您必须按照包裹的书写和阅读顺序进行操作)
活动B
Note note = (Note) getIntent().getExtras().get("NOTE");
Imp:Parcelable比Serializable快10倍我的类无法实现Serializable,它是一个已编译的类,我无法修改源代码在您的类中实现Serializable/。。。实现Serializable时不需要实现任何方法这意味着什么?在你的类代码中你实现了serializable,我错了吗?如果你想把一个对象从一个活动传递到另一个活动,这样它就实现了serializable或Parcelable接口。我的类不能实现serializable,它是一个已编译的类,我不能在你的类//中修改源代码implements serializable。。。实现Serializable时不需要实现任何方法这意味着什么?在你的类代码中你实现了serializable,我错了吗?如果你想把一个对象从一个活动传递到另一个活动,这样它就实现了serializable或Parcelable接口,我不能修改我的类的源代码,所以我不能实现Parcelable如果你不能做到这一点,那么这是不可能的。如果需要,可以创建一个新的parcelable对象,比如通过将旧对象的值设置为新对象来克隆现有对象,或者只传递id、名称、描述等重要部分。我无法修改类的源代码,因此我无法实现parcelable。如果您不能做到这一点,那么这是不可能的。如果需要,您可以通过将旧对象的值设置为新对象来创建新的可包裹对象,如现有对象的克隆,或者您只能传递重要部分,如id、名称、描述等。此对象到底是什么?它的Java类是什么?它是Mongo