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) {
    }
}
4

3 回答 3

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
    }
于 2013-10-03T16:42:16.857 回答
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
     }
 }
于 2013-10-03T16:46:35.617 回答
0

onPostExecute()只会被调用一次(当doInBackground())完成并返回它的值。

您可以publishProgress()doInBackground()每次运行后调用onProgressUpdate()

从文档

onProgressUpdate(Progress...),在调用 publishProgress(Progress...) 后在 UI 线程上调用。执行的时间是不确定的。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可用于动画进度条或在文本字段中显示日志。

于 2013-10-03T16:47:03.583 回答