2011-08-17 82 views
0

我有函數與webservice進行通信並將數據插入數據庫出現 在此功能執行期間....我無法預測執行該函數需要多少時間。需要實現進度條和線程

問題是,我需要顯示一個progess欄,它在函數執行停止時結束。它需要顯示進度。

還是有,展示了commuction任何正在進行的其他選項....

我的功能是作爲下面給出....

public Boolean startdownload() {  


     downloadhelper = new download_helper(this); 

     downloadhelper.DownloadProblemAndReasonCode();  

     pkManifest=downloadhelper.DownloadNewManifest();   

     downloadhelper.DownloadNewMessages(); 


     return True; 
    } 

此外,我對的onclick執行線程開始按鈕的事件.......

start_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
           Status.setText("Download in Progress...."); 
       new Thread(new Runnable() { 
        public void run() { 
         try { 

           startdownload(); 
           onStop(); 
           isRunning=false; 
         } catch (Throwable t) { 
          t.toString(); 
         } 

        } 
        }).start();    

       if (isRunning=false) 
       { 
        Status.setText("Download Completed"); 
       } 

      } 
     }); 

回答

1

更簡單的方法做,這是使用的Android和很容易Asyntask概念實現 參考this

0

除了Asynctask,您可以使用Handler及其handleMessage()。你的工作線程內,發送消息到Handler來顯示進度,並通知它當工作線程結束

1
//Take one progress bar Display here 

new Thread(new Runnable() { 
       public void run() { 
        try { 

          startdownload(); 
          onStop(); 
          isRunning=false; 
        } catch (Throwable t) { 
         t.toString(); 
        } 

       } 
       }).start();    

      if (isRunning=false) 
      { 
       Status.setText("Download Completed"); 
      } 
    handler.sendEmptyMessagetrue(0); 

     } 
//Now take handler class here to dismiss() progress bar when worked finish in thread 
private Handler handler()=new Handler(){ 
override onhandlerMsge();dissmiss dialog in this method 
} 
+0

是否能解決你的問題,那麼請接受它作爲一個答案 – Sameer

1

你可以把一個ProgressBar某處你的佈局,當你準備做你打電話mProgressBar.setVisibility(View.VISIBLE);網絡通信一旦完成呼叫mProgressBar.setVisibility(View.GONE);

另一種方法是使用Android系統欄中的進度條。在致電setContentView()之前,在您的活動電話requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)onCreate()中這樣做,然後您可以在您的活動的任何地方撥打setProgressBarIndeterminateVisibility(boolean)

+0

使用系統欄是減少雜波,並防止惱人的閃爍,如果進展發生得很快,可能發生的好辦法。 –

0
showLoading();// Calling showdialog before downloading.. 
     Thread t = new Thread(){ 
      public void run() { 

       // Code for download.... 

       // After download UI thread will call 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
        dialog.cancel(); 
        alertbox("Info","Download Completed"); 
        } 
       }); 
      }}; 
      t.start(); 

public ProgressDialog dialog; 
    public void showLoading() { 


      // prepare the dialog box 
      //ProgressDialog 
      dialog = new ProgressDialog(this); 

      // make the progress bar cancelable 
      dialog.setCancelable(true); 

      // set a message text 
      dialog.setMessage("Please wait while Downloading.."); 


      // show it 
      dialog.show(); 




     } 
protected void alertbox(String title, String mymessage) 
    { 
    new AlertDialog.Builder(this) 
     .setMessage(mymessage) 
     .setTitle(title) 
     .setCancelable(true) 
     .setNeutralButton("OK", 
     new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int whichButton){} 
     }) 
     .show(); 
    } 

編輯:2011年8月19日
可以取消進度使用下面的代碼對話框。請嘗試

dialog.setButton("Cancel",new DialogInterface.OnClickListener() { 


      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       // TODO Auto-generated method stub 

      } 
     }); 
+0

感謝您的評論,其作品現在....但我已經給了這onclisk在一個開始按鈕,因爲前進的進度對話框沒有能夠點擊停止按鈕來停止行動..... –