2013-10-10 4 views
0

Я проверил от java docs, что логическое и байтовое сериализуемое. Согласно android docs, мой класс реализует сериализуемый интерфейс. Я не уверен, почему я продолжаю получать исключение. Что мне здесь не хватает? Класс, как это:NotSerializableException в Android

public class msgStruct implements Serializable { 
    boolean pingPong = false; 
    int msgId = 0; 
    byte[] bufferMsg = new byte[100]; 
} 

Это сериализовать перед отправкой через сокет на сервер, например:

sendMsgStruct.pingPong = false; 
sendMsgStruct.msgId = msgId; 
rand.nextBytes(sendMsgStruct.bufferMsg); 
try { 
    ObjectOutputStream serializeMobile = new ObjectOutputStream(mobileSocket.getOutputStream()); 
    serializeMobile.writeObject(sendMsgStruct); 
    serializeMobile.close(); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
    return false; 
} 

Сервер десериализует так:

try { 
    ObjectInputStream deserializeServer = new ObjectInputStream(clientSocket.getInputStream()); 
    recvMsgStruct = (msgStruct) deserializeServer.readObject(); 
    deserializeServer.close(); 
    } catch (ClassNotFoundException e1) { 
     e1.printStackTrace(); 
    } 

Я получаю исключение в строках, где объект сериализуется и десериализуется.

+1

Is msgStruct внутренний класс? Java не поддерживает сериализацию нестатических внутренних классов. Если msgStruct является внутренним классом, попробуйте изменить модификатор доступа на static. – rhoadster91

ответ

3

Is msg Построить внутренний класс случайно? Если это так, попробуйте сделать его статическим или переместите его в свой собственный java-файл.

+0

bgse и @ rhoadster91 - спасибо. msgStruct действительно был внутренним классом, и я переместил его в свой собственный java-файл. Я больше не получаю исключение NotSerializableException. Однако теперь я получаю - StreamCorruptedException. В соответствии с этой нитью - http://stackoverflow.com/questions/15733449/streamcorruptedexception-when-sending-serialized-objects-via-bluetooth, я инициализирую вывод и inputStreams только один раз, когда сокет создается. Клиент отправляет 4 сообщения, а на 4-м сообщении он выдает исключение StreamCorruptedException. Сервер, с другой стороны, получает только третье сообщение. Это вопрос времени? – Sarvavyapi

Смежные вопросы