안녕하세요,
저는 한 장치가 게임을위한 로비를 호스트하도록 (프로그래밍 중이십니까)
인 로비 장치를 프로그래밍하고 있습니다. 하나에 가입 할 수 있습니다.
현재 한 장치가 호스트에 참가를 요청하고 호스트가 해당 장치를 플레이어 목록에 저장하고 화면에 표시하고 정보를 다시 보내는 시점에 있습니다.AsyncTask onProgressUpdate가 UI 스레드의 UI를 즉시 변경하지 않습니다.
호스트 작업을 처리하는 비동기 스레드이므로 "Join-Host"메시지를 받으면 publishProgress-Method를 통해 호출합니다 (메인 스레드로 되돌아갑니다). UI 내의 Textfield를 변경하는 클래스. 결과
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);
}
}
에서는, 제 1 단계, 난이 메시지를 수신 한 후, 직접 호스트 장치에 표시되는 결합 장치를 얻고 자하는 것이다. 뭔가 다른 내가 새 장치를 표시 할 인터페이스를 통해라는 메인 클래스에서 명령을 실행하기 위해 doInBackground 방법에 일어날 때까지
그래서 모든게 작품,하지만 즉시 걸립니다.
이 문제를 해결하는 방법에 대한 제안 사항이 있습니까?
도움 주셔서 감사합니다.
또한 내 thougths 중 하나 였지만, UI 물건을 변경하기 전에 메서드에서 System.out.println 명령을 사용하면 새 패킷이 소켓에서 수신 될 때까지 출력되지 않습니다. 그래서 뭔가가 doInBackground에서 일어나기 전에 전체 메서드가 호출되지 않는다고 생각합니다. –