2012-04-21 15 views
2

サーバアプリケーションからアンドロイドクライアントにオブジェクトを送信しようとしています。すべてのクラスは、ClassNotFoundException:CardGameの原因となっているものを含めて、同じパッケージとeclipseのsrcフォルダーにあります。私はアンドロイドに新しいとjavaにかなり新しい、そしてカップルの日のためにこれに立ち往生していたので、誰かが私は問題が何であるか把握するのを助けることができるかどうか疑問に思っています...Android ClassNotFoundException with ObjectInputStream

ここにありますここでの問題を引き起こしているコード...

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プロジェクトによって参照されていることと、CardGameクラスが正しくエクスポートされ、そのプロジェクトに表示されていることを確認してください。

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

それはOK CardGameを見つけることです:あなたが行とEclipseでソースコードを見れば

?そうでない場合は、クラスパス設定が悪いです。はいの場合、AndroidビルドはAPKを構築する際に必要なすべてのリソースを引き出しません。

+0

ありがとうございます。私がしているのは、CardGameの試合を宣言することだけです。エラーは報告されません。 APKを正しく構築するためにAndroidを取得するにはどうすればよいですか? – Matt

1

異なるVM間のシリアル化(AndroidのDelvikとSun JVMなど)は互換性がない可能性があります。

私は、サーバー/ Androidの通信を行うならば、あなたはXMLやJSON(私は後者を好む、それが容易になり、いくつかのAndroidのクラスがある)

見られるような何かに依存している必要がありますお勧めします:http://developer.android.com/reference/org/json/JSONObject.html

+0

それは私のプロジェクトのGoogleで働いていたwoild彼は互換性を保証する場合は愚かな – sherif

+0

私のために働いた..問題がなかった –

3

ObjectOutputStreamを介して送信されるオブジェクトのクラスは、サーバーとクライアントデバイスの両方で同じパッケージ名を持つ必要があることがわかります。これは私の問題を解決したようだ。誰もが助けてくれてありがとう。

+1

+1同様の問題を抱えていた、 –

+0

これは、v4.3からv4.1.2までの2つのAndroidデバイス間での送信に役立ちました –

+0

Nice one Matt。私のために働いた –

関連する問題