Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将可序列化对象传递给活动时强制转换无效_Java_Android_Serialization - Fatal编程技术网

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

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(); } 然后,在我正在做的第二个活动中

我有一个复杂的对象(包括更多的对象和hashmaps)。所有对象都实现可序列化

在第一个活动中,我会:

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实现可序列化{

    //变量和方法

    }

所以,我建议您验证这一点,我认为最好使用Singleton类或Parcelable,而不是Serializable,因为Google说,根据良好实践,这更好。 请看这个答案

我使一些应用程序和实现可序列化,我的自定义对象是:

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它应该返回。应用程序中没有其他位置可以打开第二个活动。