2016-09-15 3 views
0

문제가있어서 해결할 수 없습니다. 나는 단지 실험을 위해 메시지를 보내고 보내는 안드로이드 클라이언트 (다중 쓰레드와 함께, 메시지를 보내는 서버 또는 그 반대로 기다릴 필요가 없다)와 윈도우 용으로 작성된 서버를 만들기 위해 노력하고있다. 안드로이드 클라이언트와 거의 동일한 기능을 제공하며, 메시지를주고받습니다 (멀티 스레드도 있음). 나는 잠시 동안 (사실) 대신 두 개의 루퍼를 작성하고 난 "Log.i"를 사용하는 경우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(); 
     } 
}); 

, I는 서버, 클라이언트와이 완벽하게 서버 작업에서 보낸 모든 메시지가 나타납니다. 그러나 "Log.i"를 제거하고 "Toast.makeText"를 사용하고 위의 코드와 같이 두 개의 Loopers를 넣으면 서버에서 보내는 첫 번째 메시지가 수신되고 다른 메시지는 수신되지 않습니다. 이 문제를 해결하는 방법에 대한 단서가 없습니다.

제발, 무례하지 마세요, 저는 Java에서 아주 새롭습니다. 몇 가지 테스트를하고 있지만, 그저 시간 만 잃었습니다.

+0

어리석은 것처럼 보일 수도 있지만 항상 같은 메시지입니까? 그렇다면 Toast는 실제로 여러 번 실행될 때 한 번만 실행되는 것처럼 보입니다. 그 메시지가 매번 다른 경우, 나는 잘 모릅니다 ... 그것은 아주 이상한 행동입니다. –

+0

서버에서 "hi"와 같은 것을 보내고 "hello"다음에 "hi"만 토스트로 보냅니다. Log.i를 잠시 사용하면 (사실) LogCat에서 "hi"와 "hello"를 모두 얻습니다. 문제를 파악할 수 없습니다. – ontech7

답변

0

기존 토스트의 표시가 완료 될 때까지 토스트가 대기합니다. 루프 속도로 끊임없이 루프를 작성하면 백 로그가 너무 길어 져서 다른 메시지가 표시되는 데 시간이 오래 걸릴 수 있습니다.

나는 항상 업데이트 된 메시지가 있는지 확인한 다음 매번 표시하는 대신 표시하는 솔루션을 제안합니다.

+0

"runOnUiThread"를 사용하려고했습니다. Android 휴대 전화를 차단하지만 서버를 중지하면 모든 메시지가 "안녕하세요", "안녕하세요", "나" "나"있는 것으로 볼 수 있습니다. 휴대 전화를 막지 않고 runOnUiThread를 작동시킬 수 있다면 문제를 해결할 수 있습니다. – ontech7

+0

방금 ​​해결되었습니다. 어쨌든 고맙습니다. :) "public void makeToast (final String s)"을 작성하여 "수신자 스레드"에서 호출합니다. – ontech7

관련 문제