2014-02-17 5 views
2

AsyncTask의 onpostexecute 메서드에서 사용자 지정 대화 상자를 사용하고 있는데, 두 번 팝업됩니다. 사용자가 버튼을 클릭하면 대화 상자가 닫혀 야합니다. 정상적으로 작동하는 것 같습니다.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 대화 상자 = 새 대화 상자 (getActivity());'선언 대신 클래스 수준에서 대화 상자 대화 상자를 선언하십시오. – user3317558

+0

이것은 작동하지 않습니다. – Anirudh

0

코드는 코드에서 문제가없는 올바른 표시 사용자 정의 대화하기 전에 다음과 같은 조건을 작성할 수 있습니다. 확인 버튼을 클릭하십시오. 나는 당신이 AsyncTask의 두 번 execute() 메소드를 호출한다고 생각한다. AsyncTask fron 버튼을 클릭하는 것과 같이 호출 코드를 게시 할 수 있습니까?