마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

FragmentActivity에서 TCP 통신을 하려니 에러가 납니다

0 추천

FragmentActivity가 메인이 되고 거기에 TCP 통신을 하려고 합니다

AsyncTask를 이용하였는데 소켓 연결 때 client.execute()쪽에서 에러가 발생합니다

원래 이렇게 사용 할 수 없는 것인지 궁금합니다

 

public class MainFragmentActivity extends FragmentActivity {

protected void onCreate(Bundle bundle) {
		super.onCreate(bundle);
		setContentView(R.layout.framents);
try {
			client = new TCPClient();
			Log.d("MainFragmentActivity Client", "class create");
			client.execute(); <-- 여기에서 Exceptioin으로 빠집니다
		} catch (Exception e) {

			// TODO Auto-generated catch block
			Log.e("MainFragmentActivity Client", "connect error");

			client.TCPClose();
			

			client.cancel(true);
			askCancel = false;
			
			finish();
		}

	}


private class TCPClient extends AsyncTask<Object, String, Object> {
		protected String IP = "xxx.xxx.xxx.xxx"; // server ip 153
		protected int PORT = xxx;

		private String mWriteMessage = "";
		private String mReadMessage = "";
		private InetSocketAddress socketAddress;
		char[] buffer = new char[1024];
		private int connectedMessage[] = { 0, 0 };

		@Override
		protected void onPreExecute() {
			noneInt = 1;
			Log.d("TCP", "server connecting");

			Log.d("TCP Client Class", "1");

			try {

				socketAddress = new InetSocketAddress(IP, PORT);
				
				socket = new Socket();
				
				socket.connect(socketAddress, 3000);
			
				output = new BufferedWriter(new OutputStreamWriter(
						socket.getOutputStream()));
				
			} catch (UnknownHostException e) {
				// TODO Auto-generated catch block
				Log.e("socket connect", "unknow host error");

			} catch (IOException e) {
				// TODO Auto-generated catch block
				Log.e("TCP Class", "socket creat");

				TCPClose();
				
				finish();

				client.cancel(true);

			}
		}

 ...........................
}



}

 

안왕초보 (1,390 포인트) 님이 2015년 10월 26일 질문

1개의 답변

+1 추천
 
채택된 답변
AsyncTask의 onPreExecute()의 로직을  doInBackground() 메서드로 옮겨보세요.. 안드로이드는 IO등의 작업을 UI 스레드에서 하지 않도록 제한을 하고 있습니다.
mcsong (44,040 포인트) 님이 2015년 10월 27일 답변
안왕초보님이 2015년 10월 27일 채택됨
아....예전에 Activity에서 쓰던 방법이라 당연히 되는지 알았는데...
감사합니다!!
...