2013-07-18 3 views
1

데이터베이스에서 데이터를 추출하고이를 목록에 채우는 프로 시저가 있습니다. 쿼리가 실행되는 동안 진행률 대화 상자를 표시하려고하지만 쿼리가 실행 된 후에야 시각적으로 나타납니다. 나는 별도의 스레드에서 ProgressDialog을 실행해야한다고 생각하지만 몇 가지 제안을 따랐으므로 제대로 작동하지 않을 수 있습니다.ProgressDialog (별도 스레드)

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

    private ProgressDialog mProgress; 

    @Override 
    protected void onPreExecute() { 
     //Create progress dialog here and show it 
    } 

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

     // Execute query here 

     return null; 

    } 

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

     //update your listView adapter here 
     //Dismiss your dialog 

    } 

} 

가 호출하려면 :

그래서 내 Activity 난 그냥

private void DisplayAllproductListView(String SqlStatement) {   
    ProgressDialog dialog = 
    ProgressDialog.show(MyActivity.context, "Loading", "Please wait...", true); 
    //.................. 
    //.................. 
    //execute sql query here 
    dialog.dismiss(); 
    } 

감사

+3

세퍼레이트 스레드! asynctask 디스플레이 진행 대화 상자를'onPreExecute'에 사용하고'onPostExecute'에 닫습니다. – Raghunandan

+0

AsyncTask를 사용해보십시오 – Joel

답변

10

1.show 당신의 공정 대화 메인 스레드에서 g

2.start (예 : 스레드 A와 같은) 새로운 스레드는

3.when 사용 핸들러는, 메인 스레드에 스레드 A에서 후자의 일축을 메시지를 보낼 수, 수행 무거운 작업을 처리하는 프로세스 대화

코드는 다음과 같습니다. private ProcessDialog pd;

+0

해결책 주셔서 대단히 감사합니다. 나는 그것이 나를 위해 충돌을 제외하고는 완벽하게 작동하고 있다고 생각한다. 것은 나의 "무거운 직업"이 쿼리, 사용자 정의 된 데이터 어댑터 및 목록보기로의 매핑을 포함한다는 것입니다. 그게 문제가 될 수 있다고 생각하니 ?? 나는 새로운 밟는 것에서 만 질문을해야합니까 ?? – Alex

+0

당신은 스레드에서 무거운 것을 할 수 있습니다. – kvh

+0

그리고 메인 스레드에서만 ui 만 처리 할 수 ​​있음을 기억하십시오. – kvh

3

이 같은 시도가

new MyAwesomeAsyncTask().execute(); 
+0

해결책 주셔서 대단히 감사드립니다. 나는 그것이 나를 위해 충돌을 제외하고는 완벽하게 작동하고 있다고 생각한다. 것은 나의 "무거운 직업"이 쿼리, 사용자 정의 된 데이터 어댑터 및 목록보기로의 매핑을 포함한다는 것입니다. 그게 문제가 될 수 있다고 생각하니 ?? 비동기 작업에서만 쿼리를 사용해야합니까 ?? – Alex

+0

onPostExecute 메서드에 어댑터 및 listview 업데이트 코드를 넣으려고합니다. 백그라운드에서 실행되므로 doInBackground 메서드에서 UI 스레드를 조작 할 수 없습니다. –

+0

다시 한 번 감사드립니다. 쿼리 및 사용자 지정 목록 준비 doInBackground에서 가장 잘 작동합니다. 어떻게 개체를 CustomListDataAdaptor doInBackground에서 onPostExecute 전달할 수 있습니까 ?? 구문은 무엇입니까? 고마워요 만 – Alex

0

Android UI가 메인 UI 스레드에서 실행되도록하려면 어떻게해야합니까? 핸들러를 만들 필요가 없습니다.

runOnUiThread(new Runnable() { 
    public void run() { 
     progressDialog.dismiss(); 
    } 
});