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 に答える