在活动之间传递对象
我开发了一个由多个活动组成的Android应用程序,我必须在它们之间传递ab对象,但是我无法通过使用意图来传递它,因为对象的类没有实现可序列化,我该怎么做? 我不能修改我的课 谢谢:)的源代码在活动之间传递对象
public class MyClass { //stuff }
//I can't modify this source code
MyClass m = new MyClass(); //object I have to pass
假设有一个名为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为Parcelable如果显示错误,则只需按ALT + ENTER和实现方法。 尝试一次,希望它能工作。
为StudentDataObject样本实施例应该是这样的: -
public class StudentDataObject implements Parcelable {
// fields
//empty constructor
//parameterised constructor
//getters and setters
//toString method
//last implement some Parcelable methods
}
谢谢,这就是我要做的 –
@GCM欢迎,如果您对上述示例有疑问,请告诉我 –
此代码可以帮助你:
public class EN implements Serializable {
//... you don't need implement any methods when you implements Serializable
}
FirstActivity
EN enumb = new EN();
Intent intent = new Intent(getActivity(), NewActivity.class);
intent.putExtra("en", enumb); //second param is Serializable
startActivity(intent);
SecandActivity
Bundle extras = getIntent().getExtras();
if (extras != null) {
en = (EN)getIntent().getSerializableExtra("en"); //Obtaining data
}
我的类无法实现可串行化,它是一个编译类,我无法修改源代码 –
在您的类中实现Serializable –
//当您实现可序列化时,您不需要实现任何方法 –
您需要实现parcelable,然后通过intent传递它。不要使用Serializable原因比parcelable慢。
这里了解如何让你的对象parcelable:https://developer.android.com/reference/android/os/Parcelable.html
你不来以后,通过你的对象是这样的:
intent.putExtra("KEY", your_object);
来阅读:
getIntent().getExtras().getParcelable("KEY");
我不能修改我的类的源代码,所以我不能实现Parcelable –
如果你不能这样做,那么这是不可能的。如果你想要的话,你可以通过设置旧对象的值来创建一个新的可以对象,就像现有对象的克隆一样,或者只传递重要的部分,比如id,name,description等。 –
首先创建Parcelable数据模型。
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();
}
}
投放对象为目的
intent.putExtra("KEY", object);
获取对象从意图
object = getIntent().getExtras().getParcelable("KEY");
DataModel是我必须通过的对象的类吗? –
扩展类并实现在继承的类序列化或parcelable和使用它的对象在其他的答案。
Class NewClass extends MyClass implements serializable {
//Create a constructor matching super
}
这个类,而不是我的
类的使用对象究竟是此对象吗?它的Java类是什么? – CommonsWare
它是一个MongoDBAndroidDriver类 –
我的猜测是它应该是一个单例,直接或通过某种包装。所以,你没有把它传递出去,但所有的东西都可以引用它。无论如何,你没有办法在活动之间传递它,所以它不是要成为一个单身人士,就是你将不得不坚持一项活动(例如,使用多个片段)。 – CommonsWare