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

AsyncTask background 결과를 동기적으로 받고 싶은데 어떻게 해야될까요...

0 추천

로그인 버튼 작업 중입니다.

로직을 간단하게 설명하자면

SharedPreferences에 사용자 아이디가 있으면 MainActivity로 이동(이 로직은 문제 없이 처리됩니다.)

 

아래가 문제인데

사용자 아이디가 없으면 UserInfoEnterActivity로 이동해서

정보 입력 후 로그인 버튼 터치 > 서버로 입력정보 전달 > 서버에 정보 입력 후 생성한 아이디 SharedPreferences에 저장 >

MainActivity로 이동

 

볼드체로 입력한 로직을 동기적으로 처리하고 싶은데요..

AsyncTask

에 doInBackground 로 네트워크 타는 로직은 잘되는데

버튼을 누르면 백그라운드로 서버 로그인 처리를 넘기고 다음 로직을 타버리게 되는데..

이 부분을 잠시 멈추고 싶은데 안될까요;; 

 

onPostExecute() 에서 

액티비티 이동하도록 처리를 해주면 되겠다 싶긴한데 이렇게 처리하는게 맞는지 싶어서 질문드립니다!

 

혹은 더 나은 방법이 있으면 공유 좀 부탁드립니다!

infoc (440 포인트) 님이 2020년 4월 18일 질문

1개의 답변

+1 추천
API  호출같은 비동기 처리는 RxJava나 coroutine을 쓰시는 게 좋아요. 특히나 비동기 코드를 동기식 코드처럼 짜시려면 Kotlin Coroutines를 사용하는 걸 추천드려요. 그리고 Activity같은 뷰 안에서 직접 API 호출하기 위한 코드는 별도의 클래스 ViewModel이나 Presenter로 빼내서 사용하시구요. 이것도 여의치 않으시고 코틀린 사용이 가능하시다면, Anko라이브러리에 async라는 확장함수가 있습니다. 이 함수를 쓰면 비동기 처리를 동기식 코드로 처리할 수 있습니다. 내부적으로는  코루틴이지만요.
익명사용자 님이 2020년 4월 21일 답변
아아....코루틴 이라는 키워드 알려주셔서 감사합니다..
근데 제 소스가 코틀린이 아니고 학습곡선이 큰거 같아서 더 쉬운 방법을 찾앗습니다. ㅠㅠㅠ

AsyncTask.execute().get()  
처럼 뒤에 get()을 넣어주니 동기적으로 동작하더라구요...
https://blog.naver.com/gingsero/221921644044
...