Java 将可序列化对象传递给活动时强制转换无效
我有一个复杂的对象(包括更多的对象和hashmaps)。所有对象都实现可序列化 在第一个活动中,我会:Java 将可序列化对象传递给活动时强制转换无效,java,android,serialization,Java,Android,Serialization,我有一个复杂的对象(包括更多的对象和hashmaps)。所有对象都实现可序列化 在第一个活动中,我会: public void secondActivity(MyObject o) { Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("myobject", o); startActivity(intent); finish(); } 然后,在我正在做的第二个活动中
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
这是在活动之间传递复杂对象的正确方法吗?我错过了什么
或者我应该实现singleton类吗?您做得很好,所以我认为可以:
- 您正在向secondActivity方法发送不正确的对象(如ArrayList而不是正确的MyObject)
- 请查看是否在代码的其他部分使用此键“myobject”,并在putExtra中设置其他对象
- 验证MyObject类,查看某个变量是否为ArrayList并将其删除(仅用于测试)
- 您的自定义对象没有“implements Serializable”,例如: 公共类MyObject实现可序列化{ //变量和方法 }
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:我不太会说英语,所以对此表示歉意。- 有一些一般准则可以解释为什么某些对象不可用 可序列化
- 它与本机代码(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。)
getIntent()
是否返回添加了额外的myobject
的相同意图?@ChetanKinger它应该返回。应用程序中没有其他位置可以打开第二个活动。