I am having problem with the development of the app.
I am having the problem with the pause button. I am trying to cancel the AsycTask using function AsncTask.cancel(),but it is not working the timer is continuing without pausing. Please tell what is the problem in the code and solution.
this the code that I wrote:
mainActivity:
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
package com.example.stopwatch;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public static final String TAG = “ASYNC”;
Button btnStart, btnPause;
EditText etMin, etSec;
TextView tvTime;
int minutes=0;
int seconds=0;
Stopwatch sw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnPause = findViewById(R.id.btnPause);
btnStart = findViewById(R.id.btnStart);
etMin = findViewById(R.id.etMin);
etSec = findViewById(R.id.etSec);
tvTime = findViewById(R.id.tvTime);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "btnStart: Started");
if (etMin.getText().toString() != "") {
minutes = Integer.parseInt(etMin.getText().toString());
}
if (etSec.getText().toString() != "") {
seconds = Integer.parseInt(etSec.getText().toString());
}
etMin.setText(null);
etSec.setText(null);
sw = new Stopwatch();
// Log.d(TAG, "Min: " + minutes + " sec: " + seconds);
sw.execute();
Log.d(TAG, "btnStart: Ended");
}
});
btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sw.cancel(true);
String time=minutes+" : " +seconds;
tvTime.setText(time);
}
});
}
class Stopwatch extends AsyncTask<Integer, Integer, Void> {
@Override
protected Void doInBackground(Integer... integers) {
Log.d(TAG, "Do in Background: Started");
int min=minutes;
int sec=seconds;
for (int i = min; i >= 0; i--) {
if (i == min) {
for (int j = sec; j >= 0; j--) {
--seconds;
wait1sec();
publishProgress(i, j);
}
} else {
for (int j = 59; j >= 0; j--) {
--seconds;
wait1sec();
publishProgress(i, j);
}
}
--minutes;
}
Log.d(TAG, "Do in Background: Ended");
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
String time = values[0] + " : " + values[1];
if (values[0] == 0 && values[1] == 0) {
tvTime.setText("TIME UP !!!!");
} else
tvTime.setText(time);
}
}
void wait1sec() {
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() < startTime + 1000) ;
}
}