2016-09-15 7 views
0

У меня проблема, и я не могу решить. Я пытаюсь сделать только для экспериментов клиент Android, который принимает и отправляет сообщения (с многопоточным, поэтому мне не нужно ждать сервер, который отправляет сообщение, или наоборот), и сервер, написанный для Windows, который делает почти то же самое, что и в Android Client, получать и отправлять сообщения (w/multithread также здесь).Toast.makeText вызывается только один раз

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(); 
     } 
}); 

Если я пишу какое-то время (правда) вместо двух петлевателей и я использую «Log.i», я получаю все сообщения, отправленные с сервера, клиента и работы сервера отлично с этим. Но если я удалю «Log.i», и я использую «Toast.makeText», и я помещаю два Loopers, как и код выше, я получаю первое сообщение, которое я отправляю с сервера, остальные не принимаются. Я не знаю, как решить эту проблему.

ПОЖАЛУЙСТА, не будьте грубыми, я совершенно новый на Java, я просто делаю несколько тестов, но я просто потерял больше часа для этого.

+0

Это может показаться глупым, но всегда ли это сообщение? Если это так, то Toast появится только один раз, когда он на самом деле работает много раз. Если сообщение разное каждый раз, то я не знаю ... это очень странное поведение. –

+0

Я отправил с сервера что-то вроде «привет», а после «привет» я получил только «привет» как тост. Если я использую Log.i через некоторое время (правда), я получаю как «привет», так и «привет» на LogCat. Не могу понять проблему. – ontech7

ответ

0

Тосты ждут, пока существующие тосты не закончат показ своего дисплея. Если у вас есть цикл постоянно makeTexting на скорости цикла, отставание станет настолько длинным, что разные сообщения, вероятно, займут очень много времени, чтобы появиться.

Я бы предложил в качестве решения проверить, есть ли обновленное сообщение, а затем отображается только, если это так, а не отображать каждый раз.

+0

Я попытался использовать «runOnUiThread». Это блокирует меня телефон Android, но когда я останавливаю сервер, я вижу все сообщения, появляющиеся последовательно «привет», «как» «есть» «вы». Если я могу сделать runOnUiThread работать без блокировки моего телефона, я могу решить свою проблему. – ontech7

+0

Просто решил прямо сейчас, спасибо вам все равно :) Я решил сделать «public void makeToast (final String s)» и называть его в моей «нитью приемника», – ontech7