Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从AsyncTask ProgressDialog取消AsyncTask_Java_Android_Android Studio_Android Asynctask - Fatal编程技术网

Java 从AsyncTask ProgressDialog取消AsyncTask

Java 从AsyncTask ProgressDialog取消AsyncTask,java,android,android-studio,android-asynctask,Java,Android,Android Studio,Android Asynctask,(这与空指针无关): 我在AsyncTask中有一个进度条,并添加了一个取消按钮来取消AsyncTask 我可以从asynctask外部取消asynctask,但我需要在progressdialog中实现cancel函数,该函数在asynctask下实现 因此,问题是如何使用在asynctask下的progressdialog中实现的cancel按钮取消asynctask 请签入“doInBackground”。异步任务不会被取消 下载_result.java类: public class Do

(这与空指针无关): 我在AsyncTask中有一个进度条,并添加了一个取消按钮来取消AsyncTask

我可以从asynctask外部取消asynctask,但我需要在progressdialog中实现cancel函数,该函数在asynctask下实现

因此,问题是如何使用在asynctask下的progressdialog中实现的cancel按钮取消asynctask

请签入“doInBackground”。异步任务不会被取消

下载_result.java类:

public class Download_result extends AsyncTask<String,Integer,Void>{
ProgressDialog progressDialog;
Context context;
String pdfFile;


Download_result(Context context, String pdfFile){
    this.context=context;
    this.pdfFile=pdfFile;
}
@Override
protected void onPreExecute() {
        progressDialog = new ProgressDialog(context);
        progressDialog.setTitle("Downloading...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMax(200);
        progressDialog.setCancelable(false);
        progressDialog.setProgress(0);
        progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Download_result.this.cancel(true);  
                dialog.dismiss();
            }
        });
        progressDialog.show();
}

@Override
protected Void doInBackground(String... params) {
      //given below
}
@Override
protected void onProgressUpdate(Integer... values) {
        progressDialog.setProgress(values[0]);       
}

@Override
protected void onPostExecute(Void result) {
        progressDialog.cancel();        

}
}

在AsyncTask中创建一个“boolean keepGoing”,并将其设置为true。在您的“doInBackground”程序中,定期对其进行轮询,如果为false,则返回。将取消按钮绑定到AsyncTask中的setter,该setter将“keepGoing”标志设置为false。这应该可以完成任务。

在AsyncTask中创建一个“boolean keepGoing”,并将其设置为true。在您的“doInBackground”程序中,定期对其进行轮询,如果为false,则返回。将取消按钮绑定到AsyncTask中的setter,该setter将“keepGoing”标志设置为false。这应该可以完成任务。

您没有在“取消”按钮按下中取消对话框。。也可以使用设置按钮

试试这个:

 @Override
protected void onPreExecute() {
        progressDialog = new ProgressDialog(context);
        progressDialog.setTitle("Downloading...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMax(200);
        progressDialog.setCancelable(false);
        progressDialog.setProgress(0);
        progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
          download.cancel(true);
           downloadstatus=false;  //add boolean check
          dialog.dismiss();
        }
      });
        progressDialog.show();
}
要取消异步任务,请使用:

 Public Download_result download;
 download = new Download_result();
 download.execute();
download.cancel(true);
doInbackGround
()


您尚未在“取消”按钮按下中取消对话框。。也可以使用设置按钮

试试这个:

 @Override
protected void onPreExecute() {
        progressDialog = new ProgressDialog(context);
        progressDialog.setTitle("Downloading...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMax(200);
        progressDialog.setCancelable(false);
        progressDialog.setProgress(0);
        progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
          download.cancel(true);
           downloadstatus=false;  //add boolean check
          dialog.dismiss();
        }
      });
        progressDialog.show();
}
要取消异步任务,请使用:

 Public Download_result download;
 download = new Download_result();
 download.execute();
download.cancel(true);
doInbackGround
()


在ProgressDialog的按钮上使用DialogInterface listener,例如:

protected void onPreExecute() {
            pd = new ProgressDialog(MainActivity.this);
            pd.setTitle("PAUL app");
            pd.setMessage("Loading data ...");
            pd.setButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // User has cancelled task ... just quit!
                    MainActivity.this.finish();
                    return;
                }
            });
            pd.show();
        }

在ProgressDialog的按钮上使用DialogInterface listener,例如:

protected void onPreExecute() {
            pd = new ProgressDialog(MainActivity.this);
            pd.setTitle("PAUL app");
            pd.setMessage("Loading data ...");
            pd.setButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // User has cancelled task ... just quit!
                    MainActivity.this.finish();
                    return;
                }
            });
            pd.show();
        }
Download\u结果
作为参数发送给自己的构造函数没有任何意义。您永远不能拥有有效的引用来传递构造函数。您应该将此构造函数更改为

Download_result(Context context, String pdfFile)
Download\u result
的每个方法都已经引用了一个名为
this
Download\u result
对象。由于您需要在内部类中访问它,请使用
下载\u结果。此

progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Download_result.this.cancel(true);
        dialog.dismiss();
    }
});
Download\u结果
作为参数发送给自己的构造函数没有任何意义。您永远不能拥有有效的引用来传递构造函数。您应该将此构造函数更改为

Download_result(Context context, String pdfFile)
Download\u result
的每个方法都已经引用了一个名为
this
Download\u result
对象。由于您需要在内部类中访问它,请使用
下载\u结果。此

progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Download_result.this.cancel(true);
        dialog.dismiss();
    }
});


张贴碰撞日志可能重复的请显示导致NPE的日志和代码。一定要清楚地指出崩溃发生的确切代码行。@code peedient编辑检查…请检查
在com.************.result.Download_result$1.onClick(Download_result.java:62)
Download_result.java的第62行是什么?发布崩溃日志可能重复的请显示日志和导致NPE的代码。一定要清楚地指出崩溃发生的确切代码行。@code peedient编辑检查…请检查
在com.************.result.Download_result$1.onClick(Download_result.java:62)
Download_result.java的第62行是什么?相同的结果…实际上我也在使用setButton..参见我编辑的帖子,看看我在哪里nullpointer@wangz您的
下载结果是什么。java:62
行?Download\u result.java是一个类,我在其中实现了上述代码(asynctask),而“Download.cancel(true)”在62行…要正确取消异步任务,您必须使用..
myTask.cancel(true)由于您的
下载
为空,因此会导致异常..thanx,虽然我已经实现了code Peedient建议的内容,但逻辑仍然相同,现在我没有收到任何空指针异常。但无论如何异步任务都不会被取消,我会在文件管理器中获得下载的文件。我想中途取消。我可能在我的“doInBackground”中犯了一些错误请帮我检查…请检查结果…实际上我也在使用setButton…查看我编辑的帖子,检查我得到了什么nullpointer@wangz您的
Download\u result.java:62
行是什么?Download\u result.java是一个类,我在其中实现了上述代码(asynctask)和“Download.cancel”(true)“在62行中…要正确取消异步任务,必须使用..
myTask.cancel(true)
由于您的
下载
为空,它会导致异常..thanx,虽然我已经实现了code Peedient建议的内容,但逻辑仍然是一样的,现在我没有收到任何空指针异常。但是无论如何,asynctask没有得到取消,我在文件管理器中得到下载的文件。我希望它在中途被取消。我可能在我的“工作背景”中犯了一些错误请帮我检查一下。请帮我取消任务人,删除活动不会取消后台活动我想取消任务人,删除活动不会取消后台活动我有点困惑,你不只是编辑我的代码并发布在这里我有点困惑,你不只是编辑我的代码并发布在这里谢谢,现在我不是ge正在处理nullpointer异常。但asynctask仍然没有得到取消。我在文件管理器中得到了下载的文件。我可能在“doInBackground”中犯了一些错误。请帮我检查一下。@wangz这是因为您只检查一次
isCancelled()
,就像检查
doInBackground()一样
开始。您需要定期检查此值,以检测异步任务是否被取消。@wangz您应该发布一个新问题,因为您原来的问题已经得到了回答。请随时链接到此问题以提供上下文。主要问题是取消异步任务,但尚未解决:(@wangz原来的问题是关于一个NPE的。这个问题已经解决了。请发布一个新问题以获得进一步的帮助。评论和编辑只是为了澄清,而不是完全改变问题。谢谢,现在我没有得到任何帮助