bertrandmartel / speed-test-lib

:cloud: JSpeedTest : speed test client library for Java/Android
MIT License
381 stars 119 forks source link

Download/Upload Speed in onPostExecute #21

Closed pratikshende closed 7 years ago

pratikshende commented 7 years ago

How can I get Download/Upload Speed in onPostExecute function after finishing DoInBackground process? DoInBackground function returns null, that's why can't able to access any parameters.

bertrandmartel commented 7 years ago

startDownload() and startUpload() are both non-blocking so you can wait for completion in DoInBackground by blocking that thread. When upload/download is completed, release your thread and store the result, then return the local result variable after the thread release.

You can do something like this

public class SpeedTestTask extends AsyncTask<Void, Void, SpeedTestReport> {

    Object sync = new Object();

    private SpeedTestReport mFinalReport;

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

        synchronized (sync) {
            SpeedTestSocket speedTestSocket = new SpeedTestSocket();

            // add a listener to wait for speedtest completion and progress
            speedTestSocket.addSpeedTestListener(new ISpeedTestListener() {

                @Override
                public void onDownloadFinished(SpeedTestReport report) {
                    // called when download is finished
                    Log.v("speedtest", "[DL FINISHED] rate in octet/s : " + report.getTransferRateOctet());
                    Log.v("speedtest", "[DL FINISHED] rate in bit/s   : " + report.getTransferRateBit());
                    mFinalReport = report;
                    synchronized (sync) {
                        sync.notify();
                    }
                }

                @Override
                public void onDownloadError(SpeedTestError speedTestError, String errorMessage) {
                    // called when a download error occur
                    sync.notify();
                }

                @Override
                public void onUploadFinished(SpeedTestReport report) {
                    // called when an upload is finished
                    Log.v("speedtest", "[UL FINISHED] rate in octet/s : " + report.getTransferRateOctet());
                    Log.v("speedtest", "[UL FINISHED] rate in bit/s   : " + report.getTransferRateBit());
                    mFinalReport = report;
                    synchronized (sync) {
                        sync.notify();
                    }
                }

                @Override
                public void onUploadError(SpeedTestError speedTestError, String errorMessage) {
                    // called when an upload error occur
                    synchronized (sync) {
                        sync.notify();
                    }
                }

                @Override
                public void onDownloadProgress(float percent, SpeedTestReport report) {
                    // called to notify download progress
                    Log.v("speedtest", "[DL PROGRESS] progress : " + percent + "%");
                    Log.v("speedtest", "[DL PROGRESS] rate in octet/s : " + report.getTransferRateOctet());
                    Log.v("speedtest", "[DL PROGRESS] rate in bit/s   : " + report.getTransferRateBit());
                }

                @Override
                public void onUploadProgress(float percent, SpeedTestReport report) {
                    // called to notify upload progress
                    Log.v("speedtest", "[UL PROGRESS] progress : " + percent + "%");
                    Log.v("speedtest", "[UL PROGRESS] rate in octet/s : " + report.getTransferRateOctet());
                    Log.v("speedtest", "[UL PROGRESS] rate in bit/s   : " + report.getTransferRateBit());
                }

                @Override
                public void onInterruption() {
                    // triggered when forceStopTask is called
                    synchronized (sync) {
                        sync.notify();
                    }
                }
            });

            speedTestSocket.startDownload("2.testdebit.info", "/fichiers/1Mo.dat");

            try {
                sync.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return mFinalReport;
    }

    @Override
    protected void onPostExecute(SpeedTestReport report) {
        super.onPostExecute(report);

        Log.v("speedtest", "[final report] rate in octet/s : " + report.getTransferRateOctet());
        Log.v("speedtest", "[final report] rate in bit/s   : " + report.getTransferRateBit());
    }
}
pratikshende commented 7 years ago

Thank You for your quick response.