Не удается отменить асинхронную задачу в Android
Мне нужно отменить мой асинхронный поток. В моем приложении я делаю некоторые тяжелые вычисления, и я хочу дать пользователю возможность отменить вычисления (а затем повторить попытку). Я читал на форумах, что вы не можете просто остановить задачу от того, что она делает, и что вам нужно проверить, является ли задача isCancelled = true внутри вашего кода DoinBackground. Но это не работает для меня.
Сама задача работает отлично, и она выводит правильные данные, если я оставлю их до конца.
В моем приложении сначала я вызываю функцию naredi_pdf_start (view), затем, когда задача выполняется, если я вызываю close_pdf1 (view), это выдает мне ошибку. (Я меняю представления, и приложение не может найти мой pdf_text1 Textview при вызове publishProgress - исключение нулевого указателя). Я действительно не знаю, как использовать метод task.cancel (true) (в моем случае: start_pdf.cancel (true))).
Вот мой код:
String progress_pdf;
naredi_pdf start_pdf;
public void naredi_pdf_start(View view) {
start_pdf=new naredi_pdf();
start_pdf.execute();
}
public void close_pdf1(View view) {
if(start_pdf!=null) {
Log.v("not null","not null");
start_pdf.cancel(true);
setContentView(R.layout.other_view); //This is where
//I don't have TextView pdf_text1
}
}
private class naredi_pdf extends AsyncTask<Void, String, Void> {
protected Void doInBackground( Void... ignoredParams ) {
progress_pdf="Calculating Statistical Data";
//A LOT OF CODING
for(int i = 0; i < 1; i++) {
if(isCancelled()) {
break;
}
else {
publishProgress("Calculating team statistics");
}
}
//MORE OF CODING
for (int i = 0; i < 1; i++) {
if (isCancelled()) {
break;
}
else {
publishProgress("Calculating player's BIO");
}
}
//MORE OF CODING
for (int i = 0; i < 1; i++) {
if (isCancelled()) {
break;
}
else {
publishProgress("Calculating player's individual performance");
}
}
return null;
}
protected void onPostExecute( Void array ) {
//saving to database
}
protected void onProgressUpdate(String... values) {
progress_pdf=values[0]+"\n"+progress_pdf;
if (isCancelled()) {
}
else {
TextView pdf_text1 = (TextView) findViewById (R.id.pdf_text1);
pdf_text1.setText(progress_pdf);
// dialog(view);
}
}
}