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으로 값을 받아오기로 했다.
'안드로이드' 카테고리의 다른 글
[안드로이드스튜디오]Application Installaion Failed (0) | 2020.08.11 |
---|---|
[안드로이드스튜디오]Fragment에서 popup뷰 띄우기 (0) | 2020.06.01 |
[안드로이드스튜디오]에뮬레이터 실행 시 android/android-emugl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp:glDeleteProgram:1103 error 0x501 (0) | 2019.08.11 |
[안드로이드 스튜디오]can not resolve symbol 'theme' (0) | 2019.07.14 |
[안드로이드스튜디오]HttpURLConnection (0) | 2019.06.02 |