目标 - 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。
请帮我解决我的问题!
抱歉我的英文。
答案 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存储的想法。它也适合我(也许更正确),但我没有太多时间来编写这段代码。