2

サーバー アプリから Android クライアントにオブジェクトを送信しようとしています。ClassNotFoundException: CardGame の原因となっているクラスを含め、すべてのクラスは同じパッケージ内にあり、Eclipse の src フォルダーにあります。私はAndroidが初めてで、Javaはかなり初めてで、これに数日間立ち往生しているので、誰かが問題を理解するのを手伝ってくれるかどうか疑問に思っています...

これが問題の原因となっているコードです...

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

ありがとうございました!

4

3 に答える 3

4

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

于 2012-04-22T16:46:03.733 に答える
1

異なる VM (Android の Delvik と Sun JVM など) 間のシリアル化には互換性がない可能性があることに注意してください。

サーバー/Android通信を行う場合は、XMLまたはJSONなどに依存することをお勧めします(私は後者を好み、それを簡単にするAndroidクラスがいくつかあります)

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

于 2012-04-22T15:39:47.620 に答える
0

Eclipse のセットアップを確認できなければ、これ以上のことは言えませんが、このエラーは、CardGameビルド中の APK にクラスが最終的にパッケージを取得していないことを示しています。

そのクラスは Android プロジェクトにありますか、それとも Server プロジェクトにありますか? サーバー プロジェクトにある場合は、プロジェクトが Android プロジェクトによって参照されていること、およびCardGameクラスが適切にエクスポートされ、そのプロジェクトに表示されていることを確認してください。

Eclipse のソース コードを次の行で見ると、次のようになります。

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

それはCardGame大丈夫ですか?そうでない場合は、クラスパスの設定が間違っています。はいの場合、Android ビルドは、APK のビルド時に必要なすべてのリソースを取得していません。

于 2012-04-21T19:53:10.897 に答える