将可序列化对象传递给活动时无效转换

时间:2015-06-20 18:45:18

标签: java android serialization

我有一个复杂的对象(包括更多的对象和哈希图)。所有对象都实现Serializable

在我做的第一项活动中:

public void secondActivity(MyObject o) {
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("myobject", o);

    startActivity(intent);
    finish();
} 

然后,在我做的第二项活动中:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    MyObject o = (MyObject)intent.getSerializableExtra("myobject");
}

但在施法时,我得到了这个例外:

  

java.lang.ClassCastException:java.util.ArrayList无法强制转换为myapp.MyObject

这是在活动之间传递复杂对象的正确方法吗?我错过了什么?

或者我应该实现单例类?

2 个答案:

答案 0 :(得分:2)

你做得很好,所以我认为可以:

  • 您正在向secondActivity方法发送一个不正确的对象(如ArrayList而不是正确的MyObject)
  • 请查看您是否使用此密钥" myobject"在代码的其他部分并在putExtra中设置其他对象。

  • 验证MyObject类并查看某个变量是否为ArrayList并将其删除(仅用于测试)

  • 您的自定义对象没有"实现Serializable"像:

    public class MyObject实现Serializable {

    //变量和方法

    }

所以,我建议您验证这一点,我认为最好使用Singleton类或Parcelable而不是Serializable,因为Google认为这更好地符合Good Practice。 请查看此答案stackoverflow

我制作了一些应用程序并实现了serializable,我的自定义对象是:

public class Stores implements Serializable {
private static final long serialVersionUID = 1L;
public Integer id;
public String name;
public String store_hours;
public String telephone;
public String fax;
public String latitude;
public String longitude;

}

我的第一个活动:

private void showDialog(Stores store)
    {
        Intent intent = new Intent(this,DisplayDialogActivity.class);
        intent.putExtra("Locations",store);
        startActivityForResult(intent, 0);
    }

我的第二项活动

Stores store = (Stores) getIntent().getSerializableExtra("Locations");
PD:我不太会说英语,所以请为此道歉。

答案 1 :(得分:0)

  • 有一些通用的指导原则,为什么有些对象不是 序列化

  • 它与本机代码(java.util.zip.Deflater)关联得太紧。

  • 对象的状态取决于虚拟机的内部或 运行时环境因此可能会从运行变为运行 (java.lang.Thread,java.io.InputStream,java.io.FileDescriptor,
    java.awt.PrintJob中)。

  • 该类主要是静态方法的持有者,没有任何真实的 内部状态(java.beans.Beans,java.lang.Math)。

  • 该类是非静态内部类。序列化不起作用 与非静态内部阶级。 (静态内部类没有 被序列化的问题。)

  • 特别优选备用序列化格式 上下文。 (XOM节点类不可序列化,因为正确 XML的序列化格式是XML。)

确保您的课程已公开

  

完整参考。 Java I/O 2nd Edition