8
votes

Impossible de créer ObjectInPhatStream avec InputStream pour une prise Bluetooth sur la plate-forme Android

J'écris un jeu multijoueur pour téléphones Android. La communication est via Bluetooth. J'ai réussi à envoyer des octets d'un téléphone à l'autre à l'aide du flux d'entrée / sortie. Depuis que je dois pouvoir transférer des objets, je veux des objectifs. Cependant, lorsque j'essaie de créer un objet dans mes flux, mon programme est suspendu à l'instruction.

    } catch (Exception e) {

        Log.e(TAG,"Error");
        Log.d(TAG,e.getMessage());
        e.printStackTrace();
    } 

    Log.d(TAG,"attempting to create OOS");
    try {
        oos = new ObjectOutputStream(mmOutStream);
    } catch (IOException e) {
        Log.e(TAG,"IO exception for Output Stream, I have no idea what caused this");
        Log.d(TAG,e.getMessage());
    }

}

public void run() {.....}


0 commentaires

3 Réponses :


1
votes

D'accord, je pense savoir ce que j'ai mal fait. Les flux d'objets sont plus compliqués, il semble que le constructeur ObjectInPhatStream ait besoin de données pour fonctionner avant de créer le flux. J'ai résolu ce problème par

  1. Création des OOS.
  2. Démarrez le constructeur pour l'OIS dans un fil séparé.
  3. Écrivez des données dans les OO et rincez-la.
  4. Attendez que l'OIS devienne initialisé avant de le lire.

    C'est ce que j'utilise maintenant (notez que j'ai également ajouté un tampon): xxx


2 commentaires

Ceci est tout non-sens. StreamCorrressionException n'est pas lancé lors de la création d'un objetOutPutStream. Tout ce que vous avez à faire est de créer d'abord l'objetOutputStream aux deux extrémités.


Je fais d'abord la création d'ObjectOutputStream, puis créant ainsi les intrigions. Et aussi rincer des sorties après avoir écrit. Je reçois toujours le problème "Hang".



8
votes

Il suffit de construire le ObjectOutputStream, et Flush () IT, aux deux extrémités avant construire le ObjectInputStream. Vous n'êtes pas obligé d'écrire des données de votre choix.


3 commentaires

Pouvez-vous donner un exemple en code? J'ai le même problème et je ne comprends pas bien votre solution ...


Pouvez-vous s'il vous plaît élaborer un peu. Je n'ai pas eu votre solution.


@Kake voir Modifier. Je ne vois pas comment ça peut être plus clair que ça.



3
votes

comme EJP suggéré ...

        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        oos.flush();
        ObjectInputStream is = new ObjectInputStream(socket.getInputStream());


0 commentaires