简体   繁体   English

尝试从ObjectInputStream读入时,Android中的ClassCastException

[英]ClassCastException in Android when trying to read in from ObjectInputStream

I've got a problem with an android application I'm working on. 我正在使用的android应用程序存在问题。 I've got two phones connected through Wi-Fi and I pass a custom serialized class from one phone to the other using ObjectOutputStream / ObjectInputStream . 我有两部通过Wi-Fi连接的电话,并且使用ObjectOutputStream / ObjectInputStream将自定义序列化类从一部电话传递到另一部电话。 The classes on the two phones are identical but when I try to read on one phone I get a ClassCastException . 两部手机上的类相同,但是当我尝试在一部手机上阅读时,出现ClassCastException

07-19 08:19:41.636: E/ClientActivity(1775): java.lang.ClassCastException: sMessage
07-19 08:19:41.636: E/ClientActivity(1775):     at     com.example.nfcclientv2.ClientService.runService(ClientService.java:87)
07-19 08:19:41.636: E/ClientActivity(1775):     at com.example.nfcclientv2.ClientService.onStartCommand(ClientService.java:66)
07-19 08:19:41.636: E/ClientActivity(1775):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2043)
07-19 08:19:41.636: E/ClientActivity(1775):     at android.app.ActivityThread.access$2800(ActivityThread.java:117)
07-19 08:19:41.636: E/ClientActivity(1775):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:998)
07-19 08:19:41.636: E/ClientActivity(1775):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-19 08:19:41.636: E/ClientActivity(1775):     at android.os.Looper.loop(Looper.java:130)
07-19 08:19:41.636: E/ClientActivity(1775):     at android.app.ActivityThread.main(ActivityThread.java:3691)
07-19 08:19:41.636: E/ClientActivity(1775):     at java.lang.reflect.Method.invokeNative(Native Method)
07-19 08:19:41.636: E/ClientActivity(1775):     at java.lang.reflect.Method.invoke(Method.java:507)
07-19 08:19:41.636: E/ClientActivity(1775):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
07-19 08:19:41.636: E/ClientActivity(1775):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
07-19 08:19:41.636: E/ClientActivity(1775):     at dalvik.system.NativeStart.main(Native Method)

I read in the object and the line that the error happens on: 我读入对象和发生错误的行:

sMessage sMsg = (sMessage)ois.readObject();

Here's how I write out the sMessage : 这是我写sMessage

oos = new ObjectOutputStream(client.getOutputStream());
oos.writeObject(sMsg);
oos.flush();
oos.close();

and here's my sMessage class: 这是我的sMessage类:

import java.io.Serializable;

public class sMessage implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public String type = null;
    public byte[] data = null;
};

I have this class on both phones and as I said they are identical so I'm not quite sure why I'm getting a ClassCastException . 我在两部手机上都有这个课程,正如我所说的,它们是相同的,所以我不确定为什么会收到ClassCastException

If anymore information would help, I'd be happy to post it and any help is appreciated. 如果有更多信息对您有所帮助,我将很乐意将其发布,感谢您的帮助。

Well, I'm not entirely sure what the exact problem was but in my case I checked the class of the object coming in from the ObjectInputStream and it was including the full package name of my class so I changed my cast from just "(sMessage)oid.readObject()" to "(packageName + sMessage)oid.readObject()". 好吧,我不完全确定确切的问题是什么,但就我而言,我检查了来自ObjectInputStream的对象的类,它包含了类的完整程序包名称,因此我将演员表从“(sMessage )oid.readObject()“到”(packageName + sMessage)oid.readObject()“。 It should also be noted that these classes are in separate applications but have the same package name. 还应注意,这些类在单独的应用程序中,但具有相同的程序包名称。

Hope that helps someone. 希望能对某人有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM