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メソッドで何かが発生してメインクラスのコマンドが実行され、新しいデバイスが表示されます。
この問題を解決する方法はありますか?
ご協力いただきありがとうございます。
これも私の味方でしたが、UIの内容を変更する前にSystem.out.printlnコマンドがあると、新しいパケットがソケットで受信されるまで印刷されません。 doInBackgroundで何かが起こる前に、メソッド全体が呼び出されないと思います –