如何保存自定义类对象并将其传输到另一个活动

时间:2013-11-26 15:13:09

标签: android eclipse class object

目标 - Android 4.1.2

我需要保存自定义类对象的实例并将其传输到另一个活动。 我创建了一个简单的类ObjectTransfer:

public  class ObjectTransfer {
private static Object TransfObj;

public static void setTransferObj(Object trObj){
    TransfObj = trObj;
}

public static Object getTraObject(){
    Object retObj =TransfObj;
    TransfObj = null;
    return retObj;
}
源活动中的

ObjectTransfer.setTransferObj(MyCustom);

在dest。活动:

MyCustom = (MyCustom) ObjectTransfer.getTraObject();

这对我有用,但有时MyCustom在ObjectTransfer中变为null。

请帮我解决我的问题!

抱歉我的英文。

4 个答案:

答案 0 :(得分:1)

在活动之间移动时,Android可以在开始新活动之前终止您的应用程序。在这种情况下,您将丢失数据。然而,这是一种罕见的情况,从主屏幕返回时会发生更多情况。

最佳做法是使用intents来传递数据。要对整个对象进行编码,您需要使用Intent.putExtra(),并且您的对象必须为Parcelable

编辑:只是想到了这种情况发生的另一个原因。您的代码未同步,您可能有线程同步的错误。尝试在那里添加synchronization block

答案 1 :(得分:0)

使你的ObjectTransfer实现Serializable:

public class ObjectTransfer implements Serializable{

在第一个活动中传递对象:

Intent in=new Intent(FirstActivity.this,SecondActivity.class);
in.putExtra("obj", obj);
startActivity(in);

在第二个活动中获取对象:

ObjectTransfer ap = (ObjectTransfer) getIntent().getSerializableExtra("obj");

答案 2 :(得分:0)

让您的自定义对象实现Parcelable接口,然后将该对象作为额外添加到用于启动其他活动的Intent。然后,其他活动可以正确地将自定义对象从Intent中剥离出来。这样做的另一个好处是,如果您的活动始终位于不同的流程(即不同的包)中,那么它仍然有效,因为Parcelable对象是Android在流程中有效移动数据的方式。

答案 3 :(得分:0)

我找到了决定。我宣布了

MyCustom as public static MyCustomClass MyCutom;

在第一个活动课程中。在另一项活动中,我使用以下方式进行访问:

firstActivity.MyCustom.somFunction();

我不知道它是否正确,但它对我有用。感谢Babibu关于DB存储的想法。它也适合我(也许更正确),但我没有太多时间来编写这段代码。