2016-09-15 1 views
0

J'ai un problème et je ne peux pas résoudre. J'essaie de faire, juste pour des expériences, un client Android qui reçoit et envoie des messages (w/multithread, donc je ne dois pas attendre le serveur qui envoie le message ou vice versa) et un serveur écrit pour Windows qui fait presque la même chose de Android Client, recevoir et envoyer des messages (w/multithread aussi ici).Toast.makeText est appelé une seule fois

final Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Looper.prepare(); 
      try { 
        in_server = new BufferedReader(new InputStreamReader(client.getInputStream())); //receive from server 
        //Log.i("Message from server", in_server.readLine()); 
        Toast.makeText(MainActivity.this, in_server.readLine(), Toast.LENGTH_SHORT).show(); 
      } catch (IOException e) { 
        Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
      Looper.loop(); 
     } 
}); 

Si j'écris un certain temps (vrai) au lieu de deux boudeurs et je l'utilise « Log.i », je reçois tous les messages envoyés par le serveur, le client et le serveur fonctionnent parfaitement avec cela. Mais si je supprime le "Log.i" et j'utilise "Toast.makeText" et j'ai mis deux Loopers, comme le code ci-dessus, je reçois le premier message que j'envoie du serveur, les autres ne sont pas reçus. Je n'ai aucune idée de comment résoudre ce problème. S'il vous plaît, ne soyez pas impoli, je suis assez nouveau en Java, je fais juste quelques tests mais j'ai juste perdu plus d'une heure pour ça.

+0

Cela peut sembler stupide, mais le message est-il toujours le même? Si tel est le cas, alors Toast apparaîtra pour ne s'exécuter qu'une seule fois alors qu'il est réellement lancé plusieurs fois. Si le message est différent à chaque fois, alors je ne sais pas ... que c'est un comportement très étrange. –

+0

J'ai envoyé du serveur quelque chose comme "salut" et après "bonjour", je n'ai que "salut" comme Toast. Si j'utilise Log.i dans un certain temps (vrai), je reçois à la fois "salut" et "bonjour" sur le LogCat. Impossible de comprendre le problème. – ontech7

Répondre

0

Les toasts attendent que les toasts existants aient terminé leur affichage. Si vous avez une boucle qui fait constamment un Txting à des vitesses de boucle, le backlog deviendra si long que les différents messages prendront beaucoup de temps à apparaître.

Je proposerais comme solution de vérifier pour voir s'il y a un message mis à jour et puis seulement l'affichage si oui, plutôt que d'afficher chaque fois.

+0

J'ai essayé d'utiliser "runOnUiThread". Il me bloque le téléphone Android mais quand j'arrête le serveur je peux voir tous les messages apparaissant par conséquent "bonjour" "comment" "êtes" "vous". Si je peux faire fonctionner runOnUiThread sans bloquer mon téléphone, je peux résoudre mon problème. – ontech7

+0

Juste résolu en ce moment, merci quand même :) J'ai résolu de faire un "public void makeToast (chaîne finale s)" et l'appelle dans mon "thread de réception" – ontech7