2014-02-17 7 views
2

Я использую настраиваемое диалоговое окно в методе onpostexecute в AsyncTask, оно выставляется дважды. Когда пользователь нажимает на кнопку, диалог должен быть закрыт, это, похоже, работает нормально.Как предотвратить выборочный диалог, дважды повторяющийся в asynctask onPostExecute?

Может кто-то пролить свет на то, почему его зовут дважды?

@Override 
protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 
    if (pDialog != null) { 
     pDialog.dismiss(); 
    } 

    try { 
     if (responseFromServer.contains("x")) { 
      // Pop up to create password 
      final Dialog dialog = new Dialog(getActivity()); 
      dialog.setContentView(R.layout.dialog_password); 
      dialog.setTitle("Title..."); 
      dialog.setCancelable(false); 

      final TextView etpassword = (TextView) dialog.findViewById(R.id.etpassword_dialog); 
      final Button btnpassword = (Button) dialog 
        .findViewById(R.id.btnsavepassword_dialog); 

      btnpassword.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        if (etpassword.getText().toString().length() == 0) { 
         Toast.makeText(getActivity(), "Enter password", Toast.LENGTH_SHORT) 
           .show(); 
        } else if (etpassword.getText().toString().length() < 6) { 
         Toast.makeText(getActivity(), 
           "Password should contain minimmum 6 characters", 
           Toast.LENGTH_SHORT).show(); 
        } else { 
         dialog.dismiss(); 

        } 

       } 
      }); 

      if (!dialog.isShowing()) { 
       dialog.show(); 
      } 

     } 

     else { 
      Toast.makeText(getActivity(), "Unexpected error occurred. Please try again", 
        Toast.LENGTH_SHORT).show(); 
     } 

    } catch (Exception e) { 
     Log.v("Main FRagment FB async::::::", e.getMessage()); 
    } 

}  
+0

Вы говорите, что onPostExecute вызывается дважды для одной задачи? Или что диалог загадочно выскакивает два раза? (Последовательно - один сразу после первого отклоняется или оба вместе?) Или возможно, что у вас есть несколько задач, которые потенциально могут выполняться параллельно? Я подозреваю, что пока ваш диалог виден (и перекачивает сообщения), другие задачи завершаются и вызывают onPostExecute. Это просто догадка. – selbie

+0

@ user3121673 Вы пытаетесь сказать, что ваш 'ProgressDialog' показывает два раза? ИЛИ ваш «Пользовательский диалог» показан два раза? – GrIsHu

+0

Ты работаешь в Управлении фрагментами? – Piyush

ответ

2

Вы можете написать следующее условие, прежде чем отобразить диалоговое обычаем,

if (!dialog.isShowing()) 
{ 
    dialog.show(); 
} 
+0

Пробовал, не работал. – Anirudh

+0

Попробуйте это, вместо объявления 'final Dialog dialog = new Dialog (getActivity());' объявите диалог диалога на уровне класса. – user3317558

+0

Это тоже не работает. – Anirudh

0

ваш код правильно не существует никаких проблем в коде. Нажмите кнопку «Проверить». Я думаю, что вы вызываете метод execute() AsyncTask. Можете ли вы разместить код вызова так, как вы нажимаете кнопку AsyncTask fron.