2011-01-25 1 views
1

새 활동을 시작하면 내 progressDialog가 바로 나타나지 않습니다. 같은 AsyncTask를 사용하고 있습니다. 다음 활동에서 웹 서비스의 데이터를로드하고 있습니다.진행률 대화 상자가 바로 나타나지 않습니다.

ourdepbtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      new TheTask(AboutUs.this.getParent()).execute(); 
     } 
    }); 

어떤 제안 :이 클래스 버튼의 onclick의 인스턴스를 생성하고

private class TheTask extends AsyncTask<Void, Void, Void>{ 

    Context con; 
    Intent aboutusIntent; 
    TabGroupActivity parentActivity; 
    private TheTask(Context context) 
    { 
     this.con=context; 
    } 

    @Override 
    protected void onPreExecute() { 
     progDialog = ProgressDialog.show(con, "Loading... ", 
       "please wait....", true); 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     aboutusIntent = new Intent(con, Departments.class); 
      parentActivity = (TabGroupActivity)getParent(); 
     //progDialog.show(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     parentActivity.startChildActivity("Departments", aboutusIntent); 
     if(progDialog.isShowing()) 
     { 
     progDialog.dismiss(); 
     } 


    } 

} 

: 다음은 내 비동기 클래스?

답변

3
Handler mHandler = new Handler();// This statement is to be called by the main thread 

ProgressDialog.show();// This statement is to be called by the main thread 

Thread t = new Thread( 
new Runnable(){ 

public void run() 
{ 

    callWebServicesHereAndFetchingMethod(); // 

    mHandler.post(new Runnable(){ 

    public void run() 
    { 
    ProgressDialog.dismiss(); 
    } 
}); 
    }}); 
t.start(); 
+0

감사합니다 Javanator.Il 시도해보십시오. – Nitish

+0

이 응용 프로그램에서 탭 그룹을 사용하고 있습니다. 그렇다면 이것과 관련이 있습니까? 왜냐하면 내가 doInBackground()에 startActivity를 배치하면 progressDialog가 나타나지만 균열이 충돌하기 때문입니다. 나는 FutureTaskError를 만난다. – Nitish

+0

이 것은 탭 그룹과 아무 관련이 없습니다. 모든 시각적 효과는 Main Thread에서만 제어됩니다. 단일 스레드는 페치를하거나 대화 상자에서 진행 상황을 보여줄 수 있습니다. 기본적으로 Handler 클래스가이 용도로 사용됩니다. 내가 붙여 넣은 코드는 모든 프로젝트에서 사용했으며 Dialogs를 사용하여 가져 오기 진행 상황을 보여주기 위해 최선을 다하고 있습니다. Main thread를 제외한 thread가 시각적 효과를 구현하려고하고있는 경우. 이것은 예외가있는 응용 프로그램을 크래시합니다 – Javanator

1

코드 필요 멀티 스레딩 .... 모든 시각 효과는 주 스레드에 의해 제어됩니다. 메인 스레드를 사용하여 웹 서비스에서 데이터 처리 나 처리를하는 경우 진행 대화 상자가 나타나지 않습니다. 메인 스레드가 진행 대화 상자 표시 기능을 호출하도록합니다. 다른 스레드를 사용하여 모든 페치를 수행하십시오. 가져 오기 스레드에 참여할 스레드를 만들고 핸들러 클래스 객체를 사용하여 수행 할 시각적 효과를 생성하십시오.

자세한 내용을 보려면이 부분을 자세히 작성해야합니다. 내가 너무

+0

예 Javanator.I ' 당신이 제안하고있는 것에 대한 모범을 보여줄 수 있다면 appriciate 할 것이다. – Nitish

+0

게시 코드를 확인하십시오 – Javanator

1

사용자 인터페이스 (UI)를 스레드로부터 안전하지 않습니다 것을 게시 할 예정입니다, UI를 메인 스레드에서 이루어져야에 호출 (또한 "UI 스레드"라고합니다).

Handler handler = new Handler(); // Create on main thread. 

// ... 

handler.post(new Runnable() { 
    @Override 
    public void run() { 
    ProgressDialog dialog = ProgressDialog.show(this, "", 
     "Loading. Please wait...", true); 
    } 
}); 
1

당신이 당신이 onPreExecute에서해서 ProgressDialog를 (숨기기/표시 할 수 있습니다 AsyncTask를,)/onPostExecute()이다 찾고있는

당신은 자세한 내용을보실 수 있습니다 그것에 대해 here