2017-12-11 14 views
0

Hey、
私はアンドロイドデバイスのプログラミングロビーシステム
です。そのため、1つのデバイスがゲームのロビーをホストしています(私はプログラミングしています)。それに参加することができます。
私は現在、1つのデバイスがホストに参加することを要請し、ホストはそのデバイスをプレーヤーのリストに保存し、画面に表示して情報を返信する段階にあります。ホストのものをhandeling非同期スレッドでAsyncTask onProgressUpdateは、UIスレッドのUIをすぐに変更しません。

、それは「参加・ホスト」メッセージを受信した場合、それは私のメインの中publishProgress-メソッド(それは、メインスレッドでバックです)メソッドを介して呼び出しますので、 UI内のテキストフィールドを変更するよりも、結果


protected void onProgressUpdate(ArrayList<String>... values){ 
    if(msg.equals("Join-Host")){ 
     System.out.println("Gets Called"); 
     owner.add_Player(recvpacket.getAddress().toString()); 
    } 

} 

protected ArrayList<String> doInBackground(String... IP){ 
    DatagramSocket c = null; 
    try{ 
     //Setup Datagram Server 
     c = new DatagramSocket(8888, InetAddress.getByName("0.0.0.0")); 
     c.setBroadcast(true); 
     while(!cancel) { 
      //Receive Packets 
      byte[] recvBuffer = new byte[15000]; 
      recvpacket = new DatagramPacket(recvBuffer,recvBuffer.length); 
      c.receive(recvpacket); 
      //Verify Packet 
      msg = new String(recvpacket.getData()).trim(); 
      System.out.println("Received Packet with message: " + msg); 
      if(msg.equals("Find-Hosts")){ 
       byte[] sendData = (Build.MODEL).getBytes(); 
       DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,recvpacket.getAddress(),recvpacket.getPort()); 
       c.send(sendPacket); 
      }else{ 
       publishProgress(null); 
      } 




    } 

それがメッセージを受信した後、最初のステップのために、私は、直接ホスト装置に表示された接合装置を取得したいと思います。


これで何も問題はありませんが、doInBackgroundメソッドで何かが発生してメインクラスのコマンドが実行され、新しいデバイスが表示されます。

この問題を解決する方法はありますか?
ご協力いただきありがとうございます。

答えて

0

AndroidはすぐにUIを更新しません。要素を変更すると、AndroidがUIを再描画するまでに数秒かそれ以上の時間がかかることがあります。

ただし、再描画する要素(ビュー)でinvalidate()メソッドを呼び出すと、強制的に再描画を行うことができます。あなたの場合、これは要素を変更した直後です。その時点でデバイスがどの程度ビジーであるかによって、すぐに変更内容が表示されるはずです。

+0

これも私の味方でしたが、UIの内容を変更する前にSystem.out.printlnコマンドがあると、新しいパケットがソケットで受信されるまで印刷されません。 doInBackgroundで何かが起こる前に、メソッド全体が呼び出されないと思います –

関連する問題