Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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,我正在尝试用java实现serializable,但我得到了一个例外 这是我的可序列化类: public class Serialize implements java.io.Serializable { private static final long serialVersionUID = 1L; public double dis1; public double dis2; public double error1;

我正在尝试用java实现serializable,但我得到了一个例外

这是我的可序列化类:

public class Serialize implements java.io.Serializable {
        private static final long serialVersionUID = 1L;
        public double dis1;
        public double dis2;
        public double error1;
        public double error2;
        public double coorx;
        public double coory;
        public double coorz;

    }
当我创建这个类的对象并尝试转换为字节时,就会出现这种情况

Serialize serial = new Serialize();
        serial.dis1 = dis1;
        serial.dis2 = dis2;
        serial.error1 = error1;
        serial.error2 = error2;
        serial.coorx = coorx;
        serial.coory = coory;
        serial.coorz = coorz;

        byte[] bytes = null;
        int length = 0;

        try {

            ByteArrayOutputStream bs = new ByteArrayOutputStream();
            ObjectOutputStream os = new ObjectOutputStream(bs);
            os.writeObject(serial); ///EXCEPCION
            os.close();
            bytes = bs.toByteArray();
            length = bytes.length;

        } catch (IOException e) {

            e.printStackTrace();
        }
我做错了什么

日志:

04-24 09:15:29.734: W/System.err(4279): java.io.NotSerializableException: org.gradiant.sistole.locservice.Communication
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-24 09:15:29.734: W/System.err(4279):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-24 09:15:29.734: W/System.err(4279):     at org.gradiant.sistole.locservice.Communication.datarequest(Communication.java:447)
04-24 09:15:29.734: W/System.err(4279):     at org.gradiant.sistole.locservice.UWBmain.process(UWBmain.java:311)
04-24 09:15:29.734: W/System.err(4279):     at org.gradiant.sistole.locservice.UWBmain$2.run(UWBmain.java:279)
04-24 09:15:29.734: W/System.err(4279):     at java.lang.Thread.run(Thread.java:841)

谢谢

看起来您试图序列化org.gradiant.sistole.locservice.Communication类的对象,这是您试图序列化的类中的对象吗?如果是这样,那么该对象还应该实现serializable来序列化该对象。如果您不需要该对象,可以将其设置为瞬态,如下所示:

 transient Communication comm = new Communication(...);
然后,该对象将不会被序列化,如果反序列化该对象,则该对象将为null


如果您无法实现serializable,并且在反序列化时确实需要它,那么您必须找到在反序列化时重建对象的方法

您的对象被称为序列化?这不是被禁止的吗?无论如何,问题似乎出在org.gradiant.sistole.locservice.Communication classI更改类的名称中,但问题仍然存在序列化类是否包含任何其他对象?我的意思是除了双字段。只是猜测。。。这是偶然的内部阶级吗?如果是这样,请将其设置为静态!尝试修改serialVersionUID的值:private static final long serialVersionUID=87418L;//随机长…嗯,我不太明白。。我想要序列化的类位于通信类内部。当我尝试序列化对象时,通信的公共方法classIs通信它的超类型是什么?writeObj的javadoc说:将指定的对象写入ObjectOutputStream。写入对象的类、类的签名、类及其所有超类型的非瞬态和非静态字段的值。