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

ProgressDialog가 뜨질 않습니다...

0 추천

안녕하세요.

현재 AsyncTask를 이용하여 ProgressDialog를 띄워주고

그 PostExecute 콜백에서 두 가지의 AsyncTask를 리턴받고 Dialog를 종료시키고

액티비티를 전환하는 작업을 진행하려 하고 있습니다.

 

아래는 버튼을 클릭했을 때의 코드입니다.

SavingProgressTask saveTask = new SavingProgressTask(SettingActivity.this);
saveTask.execute();

 

아래는 액티비티 내의 inner class로 만든 AsyncTask 클래스입니다.

public class SavingProgressTask extends AsyncTask<Void, Void, Void> {

        private Context mContext;
        private ProgressDialog progDialog = null;

        public SavingProgressTask(Context context) {
            mContext = context;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            progDialog = new ProgressDialog(mContext);
            progDialog.setMessage("저장중입니다.");
            progDialog.setIndeterminate(false);
            progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progDialog.setCancelable(false);
            progDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);

            // 상점변경을 했으면
            if(isUpdateStore) {
                try {
                    // 서버에 상점변경을 요청한다
                    int responseMessage = new StoreUpdateTask(SettingActivity.this).execute(fc_code).get();
                    if(responseMessage == 1) {
                        // mAuthUser 를 업데이트 하고
                        Store updateStore = new StoreDetailTask(SettingActivity.this, false).execute(fc_code).get();
                        mAuthUser.setStore(updateStore);
                        // SharedPreference 도 업데이트를 한다
                        UserAuthUtil.saveUserObject(SettingActivity.this, mAuthUser);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
            }

            // 생년월일 혹은 성별을 변경했으면
            if(isUpdateBirthday || isUpdateSex) {
                // 서버에 유저정보변경을 요청한다

                // mAuthUser 를 업데이트 하고
                // SharedPreference 도 업데이트를 한다
            }

            if(progDialog != null) {
                progDialog.dismiss();

                Intent intent = new Intent(mContext, HomeActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                mContext.startActivity(intent);
            }
        }
    }

 

현 상황에서 문제점이 무엇인가요...?

다이얼로그는 생성되지 않고 PostExecute 안의 두 개의 AsyncTask는 정상적으로 동작하며

액티비티 전환도 됩니다..

 

다이얼로그를 띄우는데 어떤 문제점이 있는건가요??

taejun (7,240 포인트) 님이 2015년 7월 7일 질문

2개의 답변

0 추천
다이얼로그가 생성되지 않는걸 디버깅해서 확인하신건가요?

그게 아니라면 정확한 답은 아닐수 있지만 혹시 asynctask가 너무 빨리 수행되어

다이얼로그가 출현한뒤 바로 사라진거 아닐까요?
컵받침 (5,500 포인트) 님이 2015년 7월 7일 답변
디버깅 시에도 생성이 되지 않아요...
PostExecute에서 수행하는 두 개의 asynctask가 있는데 get 메소드를 호출하였기 때문에 비동기가 아닌 동기로 수행되어 빠르게 수행되지 않는 것으로 판단됩니다...

다이얼로그가 왜 안뜨는지 알 수가 없네요 ㅠㅠ
핸들러를 통해서 다이얼로그를 생성 및 쇼 해보시는것도 방법일듯 합니다만...
0 추천
.get()을 통해서 호출할때는 asynctask 내에서 dialog가 정상작동이 되지 않습니다~
행인28 (480 포인트) 님이 2016년 7월 15일 답변
...