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

AsyncTask 관련질문..

0 추천
안녕하세요 안드로이드 초보개발자입니다.

다름이아니라, 제가 Asynctask를 활용해서 보조 thread로 일처리를 하고있는데,

제가 하고싶은건, Asynctask에서 처리하는게 끝난후에 Main Thread의 함수를 실행시키고싶습니다.

 

예를들어 통신을해서 Json형태로 결과를받아오는 "통신부분" 과 , 결과물을 String형태로 파싱하는 "파싱함수부분"이 있을 때,

"파싱함수부분"은 MainThread에서 실행되는 것이지만, "통신부분"이 종료된 직후에 해야하잖아요???

이거 관련된 처리나 키워드 알려주시면 감사하겠습니다!!!

 

항상 사이트 잘이용하고있습니다.
앙띠앙앙 (710 포인트) 님이 2017년 8월 16일 질문

2개의 답변

+1 추천
 
채택된 답변
Async Task에서는 서버로 전송할 뿐이죠. 서버에서 정확하게 받았는지에 대한 Event는 Async Task가 알 길이 없죠.

그래서 Retrofit2 나  RxJava를 사용합니다.

아래는 제가 선호하는 Retrofit2의 예제.

json 변환은 자동으로 됩니다. 성공하면 onResponse가 호출되고, 실패하면, onFailure가 호출됩니다.

검색 하면 국내 강좌도 많이 있습니다.

public void callAPI(final PostObject postObject) {

    Call<ResponseObject> call = APIService.getAPIs().postSomething(postObject);

    call.enqueue(new Callback<ResponseObject>() {

        @Override // 응답 처리.
        public void onResponse(Call<ResponseObject> call, Response<ResponseObject> response) {
                ResponseObject responseObj = response.body();
        }

        @Override // 오류 처리.
        public void onFailure(Call<ResponseObject> call, Throwable t) {
            Log.e(TAG, "onError: " + t.getMessage());

        }
    });

}
Will Kim (43,170 포인트) 님이 2017년 8월 16일 답변
앙띠앙앙님이 2017년 8월 16일 채택됨
와!!감사합니다.

보기에 너무편해보여서 쓰고싶은데, 제가 쓰는게 HTTP인데, 속도이슈가 좀걸리네요. 이건 속도면에서 괜찮은편인가요??HTTPPOST보다??
속도는 문제 없습니다. 오히려 빠른 듯 싶네요.
편하지만은 않습니다. API 클래스와 presenter 클래스 Model 클래스를 나누어야 하므로 잡다하게 클래스가 많아 집니다.
MVP라고 하죠. Model View Presenter
그리고 같은 회사에서 만든 Okhttp를 사용하는 게 더 궁합이 좋죠.

통신 과정을 한번 주욱 세팅해야 합니다.

가장 좋은 점은 서버와 똑같은 객체로 통신할 수 있다는 점, Json객체를 serialize/deserialize 할 필요가 없다는 점이죠.
그것만으로 충분히 아름답습니다.
0 추천
onPostExecute가 메인스레드에서 돌아가는 부분입니다.

해당 메소드는 doInBackground가 끝나면 작동하도록 되어있고 매개변수는 doInBackground에서 return한것이 들어갑니다.

여기서 에러난다면 onPostExecute에서 핸들러를사용해도 됩니다.

원래 핸들러가 서브 스레드에서 메인스레드에 작업을 시킬떄 쓰는거에요
안드안드 님이 2017년 8월 16일 답변
...