在活动之间传递复杂对象

时间:2014-02-21 10:04:20

标签: android arraylist android-activity

我在2个活动之间传递复杂对象的arraylist时遇到问题,对象(ObjA)是这样的:

ObjA:
-String
-Array of ObjB

where ObjB is:
ObjB:
-String
-Array of ObjC

where ObjC is:
ObjC:
-String
-String

3对象是可序列化的:

public class Obj implements Serializable{
private static final long serialVersionUID = 1L;
}

我尝试将对象作为普通的额外内容传递但是应用程序崩溃而没有任何日志,我该如何传递此数组?

3 obj是serialazible,他们有这样的形式: public class Materia实现Serializable {

private static final long serialVersionUID = 1L;

String titolo;
String icona;
ArrayList<Sezione> sezioni;

public Materia (){}

public String getTitolo() {
    return titolo;
}

public void setTitolo(String titolo) {
    this.titolo = titolo;
}

public String getIcona() {
    return icona;
}

public void setIcona(String icona) {
    this.icona = icona;
}

public ArrayList<Sezione> getSezioni() {
    return sezioni;
}

public void setSezioni(ArrayList<Sezione> sezioni) {
    this.sezioni = sezioni;
}

}

2 个答案:

答案 0 :(得分:1)

1。使用Application类

您可以使用Application对象执行此操作。这样,您可以在应用程序类中定义getter和setter方法,并在活动中使用它们:

public class MyApp extends Application {
    private Object obj;
    public void setObject(Object obj) {
        this.obj = obj;
    }
    public Object getObject() {
        return obj;
    }
}

活动中的用法:

MyApp app = (MyApp) getApplication();
app.setObject(/* your complex object */);

在你的第二个活动中:

MyApp app = (MyApp) getApplication();
Object complexObj = app.getObject();

这是一个糟糕的方法。用户切换到另一个应用时,Android可能会杀死您的应用(即您的应用运行的过程),特别是当设备在低内存上运行时。在您的应用被杀之后,如果用户返回您的应用,则Application类会重新实例化,因此obj内部的null引用为{{1}}。

2。使您的复杂对象实现Serializable或Parcelable

请参阅:Android: Difference between Parcelable and Serializable?

答案 1 :(得分:0)

如果所有三个对象都是可序列化的,那么

在通话活动中:

ObjA a = new ObjA();
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("t", a);
startActivity(i);

在被叫活动中:

ObjA a=(ObjA) getIntent().getSerializableExtra("t");