在活动之间传递对象

GCM*_*4IB 0 android android-activity

我正在开发一个由多个Activity组成的Android应用程序,并且必须在它们之间传递ab Object,但是由于该对象的类未实现可序列化,因此无法通过intent传递它,该怎么办?我无法修改班级的源代码谢谢:)

public class MyClass { //stuff }
//I can't modify this source code
MyClass m = new MyClass(); //object I have to pass
Run Code Online (Sandbox Code Playgroud)

Kai*_*ade 5

假设有一个名为StudentDataObject的数据对象类,具有某些数据类型。

StudentDataObject studentDataObject = new StudentDataObject();
Gson gson = new Gson();
String studentDataObjectAsAString = gson.toJson(studentDataObject);
Run Code Online (Sandbox Code Playgroud)

现在,我们使用意图将其从一个活动传递到另一个活动。

Intent intent = new Intent(FromActivity.this, ToActivity.class);
intent.putExtra("MyStudentObjectAsString", studentDataObjectAsAString);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

现在我们处于新的活动中,我们使用下面的行在此处获取该对象。

Gson gson = new Gson();
String studentDataObjectAsAString = getIntent().getStringExtra("MyStudentObjectAsString");
StudentDataObject studentDataObject = gson.fromJson(studentDataObjectAsAString, StudentDataObject.class);
Run Code Online (Sandbox Code Playgroud)

活动本身知道从哪里调用我,因此我们可以直接编写getIntent()方法。

在这里,我们只需要添加一个GSON依赖项, 我们可以使用以下build.gradle文件中的行来添加它。

compile 'com.google.code.gson:gson:2.6.2'
Run Code Online (Sandbox Code Playgroud)

一件事是将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 
        }
Run Code Online (Sandbox Code Playgroud)