2012-04-21 79 views
2

我想從服務器應用程序發送一個對象到Android客戶端。所有的類都在同一個包和eclipse中的src文件夾中,包括導致ClassNotFoundException:CardGame的那個類。我是新來的android和相當新的Java,並已堅持了這一兩天,所以我想知道如果有人能夠幫助我找出問題是什麼...Android ClassNotFoundException與Ob​​jectInputStream

這是導致該問題的代碼...

CardGame game = (CardGame) in.readObject(); 

這裏是堆棧跟蹤...

04-21 19:21:35.608: W/System.err(482): java.lang.ClassNotFoundException: CardGame 
04-21 19:21:35.618: W/System.err(482): at java.lang.Class.classForName(Native Method) 
04-21 19:21:35.618: W/System.err(482): at java.lang.Class.forName(Class.java:235) 
04-21 19:21:35.618: W/System.err(482): at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2590) 
04-21 19:21:35.618: W/System.err(482): at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1846) 
04-21 19:21:35.618: W/System.err(482): at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:826) 
04-21 19:21:35.618: W/System.err(482): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2066) 
04-21 19:21:35.618: W/System.err(482): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:929) 
04-21 19:21:35.628: W/System.err(482): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2285) 
04-21 19:21:35.628: W/System.err(482): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2240) 
04-21 19:21:35.628: W/System.err(482): at com.client.activity.play.init(play.java:107) 
04-21 19:21:35.628: W/System.err(482): at com.client.activity.play.onCreate(play.java:54) 
04-21 19:21:35.628: W/System.err(482): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-21 19:21:35.628: W/System.err(482): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
04-21 19:21:35.628: W/System.err(482): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
04-21 19:21:35.628: W/System.err(482): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
04-21 19:21:35.628: W/System.err(482): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
04-21 19:21:35.638: W/System.err(482): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-21 19:21:35.638: W/System.err(482): at android.os.Looper.loop(Looper.java:123) 
04-21 19:21:35.638: W/System.err(482): at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-21 19:21:35.638: W/System.err(482): at java.lang.reflect.Method.invokeNative(Native Method) 
04-21 19:21:35.638: W/System.err(482): at java.lang.reflect.Method.invoke(Method.java:521) 
04-21 19:21:35.638: W/System.err(482): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-21 19:21:35.638: W/System.err(482): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-21 19:21:35.648: W/System.err(482): at dalvik.system.NativeStart.main(Native Method) 
04-21 19:21:35.648: W/System.err(482): Caused by: java.lang.NoClassDefFoundError: CardGame 
04-21 19:21:35.648: W/System.err(482): ... 24 more 
04-21 19:21:35.658: W/System.err(482): Caused by: java.lang.ClassNotFoundException: CardGame in loader dalvik.system.PathClassLoader[/data/app/com.client.activity-1.apk] 
04-21 19:21:35.658: W/System.err(482): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
04-21 19:21:35.668: W/System.err(482): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
04-21 19:21:35.668: W/System.err(482): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
04-21 19:21:35.668: W/System.err(482): ... 24 more 

謝謝!

回答

0

如果你看不到你的Eclipse設置很難說更多,但是這個錯誤表明你的CardGame類沒有結束包裝到正在構建的APK中。

是Android項目中的類還是它在Server項目中?如果它在服務器項目中,請確保項目正在被Android項目引用,並且您的類正在正確導出,並且在該項目中可見。

如果你看看源代碼,在Eclipse與線:

CardGame game = (CardGame) in.readObject();

難道找CardGame OK?如果沒有,那麼你的類路徑設置是不好的。如果是的話,那麼在構建APK時,Android版本並沒有吸引所有必要的資源。

+0

謝謝。如果我所做的只是聲明CardGame遊戲;那麼沒有錯誤報告。我怎麼才能讓android正確構建APK? – Matt 2012-04-21 20:24:12

1

值得注意的是,不同VM(例如Android的Delvik和Sun JVM)之間的序列化可能不兼容。

如果你的服務器/ Android的溝通,那麼你應該依賴於像XML或JSON我會建議(我更喜歡後者,並有部分Android類,使它更容易)

見:http://developer.android.com/reference/org/json/JSONObject.html

+0

它工作在我的項目谷歌woild是愚蠢的,如果他會確保兼容性 – sherif 2012-04-22 18:11:44

+0

也爲我工作..沒有任何問題 – 2017-10-31 20:03:46

3

原來,通過ObjectOutputStream發送的對象的類在服務器和客戶端設備上都必須具有相同的包名稱。這似乎解決了我的問題。感謝大家的幫助。

+1

+1有一個類似的問題,並修復軟件包名稱解決了它! – 2012-05-02 18:29:39

+0

這適用於我發送兩個Android設備從v4.3到v4.1.2 – 2013-12-30 21:27:57

+0

好的一個馬特。也爲我工作 – 2017-10-31 20:02:46