본문 바로가기

안드로이드

[안드로이드스튜디오]AsyncTask의 doInBackground에서 return값 받아오기

HTTP통신 GET을 사용하는 메서드를 AsyncTask를 이용해 구현하였다.

현재 구조는(수정 전)

public Sring getReq(final String email, final String table){
        Log.e("<<Debug>>", "HTTPConn : get");
        AsyncTask<String, Void, Void> asyncTask = new AsyncTask<String, Void, Void>() {
            @Override
            protected Void doInBackground(String... strings) {
                HttpURLConnection 연결하고 어쩌고 저쩌고
                result = 어쩌고저쩌고
            }
            
            return null;
        }
asyncTask.execute();
return result; //null값 리턴
}

였는데, 마지막 라인 return result가 실행된 후에 doInBackGround가 실행돼서 return값이 null이었다.

doInBackground의 Void 값을 바꾸면 에러가 났다. doInBackground안에서 return값만 설정해줄 수 있으면 게임끝인데..

라고 생각하던 찰나 AsyncTask<String, Void, Void>에서 세번째 파라미터가 doInBackGround의 리턴타입이라는걸 알알게 됐고, AsyncTask<String, Void, String>으로 바꾼 후 doInBackground를 String타입으로 바꾸니 에러가 없었다. ㅋ-ㅋ

AsyncTask<String, Void, String>의 첫번째 파라미터는 doInBackground()의 파라미터 인 것 같다. 두번째 파라미터는 누군가 아는 사람이 지나가다 댓글 달아주길 바란다는 무책임한 말로 넘어가겠다.

 

근데 생각해보니까 난 doInBackground가 Void여도 해당 클래스(를 A라고 가정)의 전역변수(B라고 가정)를 doInBackground에서 수정해주고 다른 클래스에서 String result = A.B로 사용하면 되기 때문에 저딴 헛고생을 할 필요가 없었다. 역시~ 머리가 나쁘면~ 몸이 고생~~~

 

 

 

---------------------오만방자했던 1시간 전을 반성하며 수정-------------------

위에서 말한 String result = A.B 이지랄은 null이 들어가는걸 모르고있었다.

getReq 내부에서 찍은 로그를 A.B에서 찍은 로그로 잘 못 보고 있었다 시발^^

getReq 마지막에 asyncTask.execute().get으로 값을 받아오기로 했다.