[英]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.