我有一个复杂的对象(包括更多的对象和哈希图)。所有对象都实现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
这是在活动之间传递复杂对象的正确方法吗?我错过了什么?
或者我应该实现单例类?
答案 0 :(得分:2)
你做得很好,所以我认为可以:
请查看您是否使用此密钥" 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