0

我遇到了一個我正在處理的Android應用程序的問題。我有兩部通過Wi-Fi連接的手機,我使用ObjectOutputStream/ObjectInputStream將一個自定義的序列化類從一部手機傳遞到另一部手機。兩部手機上的課程都是相同的,但是當我嘗試在一部手機上閱讀時,我收到了ClassCastException嘗試從ObjectInputStream讀入時Android中的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

如果有任何信息可以幫助,我很樂意發佈它,任何幫助表示讚賞。

+0

對不起,您的課程名稱以小寫字母開頭? – Egor 2012-07-19 13:10:26

+0

這只是駱駝套。沒有真正的原因。 – user969540 2012-07-19 13:52:54

回答

0

嗯,我不完全確定究竟是什麼問題,但在我的情況下,我檢查從ObjectInputStream進來的對象的類,它包括我的類的完整包名稱,所以我改變了我的演員從只是「(sMessage)oid.readObject()」到「(packageName + sMessage)oid.readObject()」。還應該注意的是,這些類在不同的應用程序中,但具有相同的包名。

希望能幫助別人。

相關問題