尝试从ObjectInputStream读入时Android中的ClassCastException

时间:2012-07-19 12:33:19

标签: java android classcastexception objectoutputstream objectinputstream

我对我正在处理的Android应用程序有疑问。我通过Wi-Fi连接了两部手机,并使用ObjectOutputStream / ObjectInputStream将自定义序列化课程从一部手机传递到另一部手机。两部手机上的课程完全相同,但当我尝试在一部手机上阅读时,我得到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)

我读了发生错误的对象和行:

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

以下是我如何写出sMessage

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

这是我的sMessage课程:

import java.io.Serializable;

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

我在这两部手机上都有这个课程,因为我说它们是相同的,所以我不太清楚为什么我会得到ClassCastException

如果有任何更多信息有帮助,我很乐意发布,任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:0)

好吧,我不完全确定究竟是什么问题,但在我的情况下,我检查了从ObjectInputStream进来的对象的类,它包含了我的类的完整包名,所以我改变了我的演员阵容“(sMessage)oid.readObject()”to“(packageName + sMessage)oid.readObject()”。还应注意,这些类在单独的应用程序中,但具有相同的包名称。

希望能有所帮助。