2013-10-03 76 views
0

我正在使用異步任務來處理背景中的計算。但是我想每次在屏幕上更新我的計算值。我怎樣才能做到這一點使用異步任務。使用後執行方法在屏幕上獲取更新值的任何可能性。每次或只有一次異步任務更新值?

public class HandleDataManuplation extends AsyncTask<String, Void, String> 
{ 

    @Override 
    protected String doInBackground(String...v) { 
     //totalKm=gpsdataElements.Distance-Contsants.jobStartKm; 

     if(gpsdataElements.Speed<0.4) 
     { 
      Contsants.cont_WaitingTimeInSec++; 
     } 


     if (totalKm<Contsants.minDist) 
     { 
      totalfare= Contsants.minFare; 
      //tv_Fare.setText(String.format("%.2f",(totalfare))); 
     } 
     else 
     { 
      totalfare= 110+ ((totalKm-Contsants.minDist) *Contsants.rupeeKm) +(Contsants.cont_WaitingTimeInSec/60)*1; 
      //tv_Fare.setText(String.format("%.2f",(totalfare))); 
     } 
     return null; 


    } 
    @Override 
    protected void onPostExecute(String result) { 

     tv_speed.setText(String.format("%.2f",gpsdataElements.Speed*1.852)+" Km/hr"); 
     tv_JobwaitngTime.setText(Integer.toString((Contsants.cont_WaitingTimeInSec/60)) +":"+ Integer.toString((Contsants.cont_WaitingTimeInSec% 60))); 
     tv_speed.setText(String.format("%.2f",gpsdataElements.Speed*1.852)+" Km/hr"); 
     tv_JobwaitngTime.setText(Integer.toString((Contsants.cont_WaitingTimeInSec/60)) +":"+ Integer.toString((Contsants.cont_WaitingTimeInSec% 60))); 

    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
    } 
} 

回答

2

你可以用onProgressUpdate()來做到這一點。它的AsyncTask類的方法

示例代碼:

@Override 
    protected Void doInBackground(Integer... integers) { 

     //This is where you do calculation 
     //for now I'm just going to loop for 10 seconds 
     // publishing progress every second 



     for (int i=10; i<=100; i += 10) 
      { 
       try { 

        publishProgress(i); 

       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     return null; 
    } 
    protected void onProgressUpdate(Integer... progress) { 

     //This method runs on the UI thread, it receives progress updates 
     //from the background thread and publishes them to the status bar 

     // show progress bar here 
    } 
+0

遐我知道..但它是更新我的計算值每次在屏幕上或不.. – user235466

+0

它會不斷更新進度 –

+0

好吧。我會檢查那個兄弟。 – user235466

0

下面是關於如何用一個例子的AsyncTask

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 
     // Do your calcutlation 
     return totalSize; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     //update your calcultaion 
    } 

    protected void onPostExecute(Long result) { 
     //pass the result of Your calcutlation 
    } 
} 
+0

查看我的更新代碼。 – user235466

0

onPostExecute()纔會被調用一次(當doInBackground())完成並返回它的價值。

您可以從doInBackground()每次打電話publishProgress()後計算將運行onProgressUpdate()

From the Docs

onProgressUpdate(進展...),以publishProgress(進步...)的調用之後,在UI線程調用。執行的時間是未定義的。此方法用於在後臺計算仍在執行時在用戶界面中顯示任何形式的進度。例如,它可以用來爲進度條設置動畫效果或在文本字段中顯示日誌。

+0

兄弟只是看到我更新的代碼,並給我一些解決方案。 – user235466