Android 在活动之间传递对象

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

我正在开发一个由多个活动组成的Android应用程序,我必须在它们之间传递ab对象,但我不能使用intents传递它,因为对象的类没有实现serializable,我该怎么做? 我无法修改类的源代码 谢谢:)


此代码可能会帮助您:

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中像这样被接收


您可以通过两种方式将自定义对象从一个活动传递到另一个活动

  • 按实现可序列化
  • 按工具可包裹
  • (1) 通过实现可序列化无需执行任何操作只需实现可序列化 像这样进入你的课堂

    public class Note implements Serializable {
      private int id;
      private String title;
    }
    
    (2) 通过实现包裹(您必须按照包裹的书写和阅读顺序进行操作)

    活动B

    Note note = (Note) getIntent().getExtras().get("NOTE");
    

    Imp:Parcelable比Serializable快10倍

    您可以通过两种方式将自定义对象从一个活动传递到另一个活动

  • 按实现可序列化
  • 按工具可包裹
  • (1) 通过实现可序列化无需执行任何操作只需实现可序列化 像这样进入你的课堂

    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