Closed pratikshende closed 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());
}
}
Thank You for your quick response.
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.