2012-04-21 3 views
2

Я пытаюсь отправить объект из серверного приложения на клиент Android. Все классы находятся в одном пакете и в папке src в eclipse, включая тот, который вызывает ClassNotFoundException: CardGame. Я новичок в android и довольно новичок в java, и я застрял на этом пару дней, поэтому мне интересно, сможет ли кто-нибудь помочь мне разобраться, в чем проблема ...Android ClassNotFoundException с 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 получает экспорт правильно и отображается в этом проекте.

Если вы посмотрите на исходный код в Eclipse, с линией:

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

ли это нахождение CardGame OK? Если нет, то ваша настройка пути к классу будет плохой. Если да, то сборка Android не тянет все необходимые ресурсы при создании APK.

+0

спасибо. Если все, что я делаю, объявляет игру CardGame; то сообщение об ошибке не сообщается. Как я могу получить андроид для правильной сборки APK? – Matt

1

Следует отметить, что сериализация между различными виртуальными машинами (например, 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

Это работало для меня, отправляя между двумя устройствами Android от версии 4.0 до версии 4.1.2. –

+0

Nice one Matt. Работал и для меня –