2012-03-21 5 views
0

Javaサーバーからクラスメッセージをシリアル化してAndroid携帯に送信しようとしています。JavaサーバーからAndroidクライアントオブジェクトへシリアル化

ObjectInputStreamオブジェクトを開こうとするたびに、エラーが発生することなく、電話がハングします。

符号化方式 -

public void sendMessagesToPhone(String userName) { 

    System.out.println("Send messages to phone called"); 

    ObjectOutputStream outputObjects = null; 

    ServerUser user = new ServerUser(userName, ""); 
    s.getKeys(user); 


    user.setMessages(); 
    ArrayList<Message> encryptedMessages = user.getMessages(); 
    try { 
     //output = new DataOutputStream(socket.getOutputStream()); 
     outputObjects = new ObjectOutputStream(socket.getOutputStream()); 
     outputObjects.flush(); 

     for(Message m : encryptedMessages) { 
      System.out.println(m); 
      outputObjects.writeObject(m); 


     } 
    } catch (Exception e) { 
     System.out.println("unable to create the streams"); 
     e.printStackTrace(); 
    } 

try { 
    outputObjects.close(); 

} catch (Exception e) { 
    System.out.println("unable to close the streams"); 
    e.printStackTrace(); 
} 
} 
} 

そして、携帯電話自体にデコードするための試み -

public void getNewMessages() { 

     Socket connect = null; 
     ArrayList<Message> incomingMessages = new ArrayList<Message>(); 
     ObjectInputStream input = null; 
     PrintWriter pw = null; 

     try { 

      connect = new Socket("removed", 7777); 
      //hangs here on creating the ObjectInputStream 
      input = new ObjectInputStream(connect.getInputStream()); 
      pw = new PrintWriter(connect.getOutputStream(), true); 

      //client parses text input and will respond to the pw input 
      //by calling the sendMessagesToPhone(String user) method 
      pw.println("phonemessages"); 
      pw.println(currentUser.getName()); 

      Object obj = null; 
      while((obj = input.readObject()) != null) { 
       if(obj instanceof Message) { 
        incomingMessages.add((Message)obj); 
        } 
       else toast = Toast.makeText(this, "object is not a   

    message", Toast.LENGTH_SHORT); 
       toast.show(); 
      } 

     } catch(Exception e) { 

      toast = Toast.makeText(this, e.getMessage() + "error 1st catch", 

    Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
     try { 
     pw.close(); 
     } catch (Exception e) { 
      toast = Toast.makeText(this, e.getMessage() + "error 2nd catch", 

    Toast.LENGTH_SHORT); 
      toast.show(); 
     } 

     try { 
      input.close(); 

     } catch (Exception e) { 
      toast = Toast.makeText(this, e.getMessage() + "error 3rd catch", 

    Toast.LENGTH_SHORT); 
      toast.show(); 
     } 

私はこれを服用することが正しいアプローチであってもわからないんだけど、私は」どこにでもサンプルを見つけることは非常に難しいと感じました。

ご迷惑をおかけして申し訳ございません。

+0

いいです。 'encryptedMessages'が空ではないと確信していますか? –

答えて

0

シリアル化されたオブジェクトが異なるパッケージからのものである可能性があります。これは、クラスが見つかりません例外をスローするはずです。 Here is some more info。私は、共通のパッケージやカスタムマッピングを作る以外の解決策を見いだせませんでした。