【问题标题】:How to save and transfer custom class object to another activity如何保存自定义类对象并将其传输到另一个活动
【发布时间】:2013-11-26 15:13:09
【问题描述】:

目标 - 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);

在目的地。活动:

MyCustom = (MyCustom) ObjectTransfer.getTraObject();

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

请帮我解决我的问题!

对不起我的英语。

【问题讨论】:

  • 你必须使用ParcelableSerializable接口。

标签: android eclipse class object


【解决方案1】:

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

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

编辑:刚刚想到了发生这种情况的另一个原因。你的代码没有同步,你可能有线程同步的错误。尝试在此处添加synchronization block

【讨论】:

  • Parcelable 不起作用。因为我需要在我的自定义类对象中存储非常困难的结构
  • @GIKO 我认为您在这里没有其他选择。您也可以使用 Serializable 并将其存储在数据库中,但它是相同的。如果你的静态为空,那只是因为你的应用崩溃了。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    让你的 ObjectTransfer 实现 Serializable:

    public class ObjectTransfer implements Serializable{
    

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

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

    在第二个 Activity 中获取对象:

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

    【讨论】:

    • in.putExtra("obj", obj); Obj - 它是一个 ObjectTransfer 变量?
    • ObjectTransfer 类的实例。
    • 我不明白。在我的第一个活动中,我需要编写 public ObjectTransfer obj = new ObjectTransfer();然后使用它?
    • 我需要存储的对象的难度问题。
    【解决方案4】:

    我找到了决定。我声明了

    MyCustom as public static MyCustomClass MyCutom;
    

    在第一个活动课上。在另一项活动中,我使用以下方式授予访问权限:

    firstActivity.MyCustom.somFunction();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2014-12-05
      • 2020-05-18
      • 2012-10-11
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多