http통신이나 소켓 통신을 통해서 통신을 할때 3.0이후 부터는 무조건 main thread에서 통신 처리를 하면 오류가 나는데요..
이걸 별도의 쓰레드에서 처리해서 결과 값을 가지고 와야 하는데.. 이부분이 좀 저한테는 좀 어렵습니다.
지금 할고자 하는게 통신 하는부분을 jar파일로 뺴서 다른 프로젝트에서
이jar만 추가 시키고 호출하면 해당 결과 값이 리턴 되게 할려고 하는데요.
가령 jar파일안에 class명을 test라고 했을떄
test ts = new test();
String name =ts.test_socket("아이피",포트,"param1","param2");
위와 같은 식으로 test_socket()을 이용 해서 소켓 작업후 값을 읽어 와서 결과 string값을 다시 호출한 곳으로 리턴 해줄려고 합니다.
위와 같은 순으로 진행 할려고 하면 소켓통신을 thread에서 돌리고 해당 값을 getInputStream로 읽어서 리턴을 해야 하는데..
결과 값을 가지고 오는 거는 잘 되는데.. 이 string값을 어떻게 호출한 곳에 return해야 할지를 모르겠습니다.
어떻게 해야 할까요?
저도 제 생각이 가능한건지 궁금하여 댓글을 남김니다.
위에 test ts = new test(); 를 하실때 handler를 만들어서 인자값으로 넣어 주시고
그 핸들러를 이용하면 안될까요?
jar파일로 묶어서 여러군대서 사용을 하신다고 하셨는데
handler의 what 값의 이름과 값을 하나로 정해서 사용을 하시면 어느 acitvity의 handler든 사용이 가능 하지 않을까 생각해 봅니다.
벌써 윗분이 글을 남겨 주셨네요. ^^;;
수더코드니 동작은 안할거에요.
AsyncTask의 onPostExcute는 mainThread에 해당하는 곳이라(UIThread) UI변경이 가능합니다. 따라서 여기에서 콜백처리를 하시면 됩니다.
testCallback은 UI변경하려는 Activity에서 implent한뒤 정의하시면 되겠죠.
interface testCallback
{
void mainCallback();
}
class TestAsyncTask extends AsyncTask
{
testCallback callback;
void setCallback(testCallback callback)
{
this.callback = callback;
}
... doInbackground();
.... onPostExcute()
{
if(callback != null) callback.mainCallback();
}
}




메인 스레드에서 통신을 하면 오류가 나게 한 데에는 다 이유가 있습니다.
위의 소스처럼 사용하면 메인 스레드가 블럭이 되는데, 사용성에 치명적인 손해가 생기기 때문이죠.
AsyncTask 사용하시면 좋을 겁니다.