Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Firebase Android:如何取消下载?_Android_Firebase_Download_Firebase Storage - Fatal编程技术网

Firebase Android:如何取消下载?

Firebase Android:如何取消下载?,android,firebase,download,firebase-storage,Android,Firebase,Download,Firebase Storage,如何取消从Firebase下载的任务 每当我点击ProgressDialog上的某个地方时,我都想取消下载 下面是我的下载活动ExamesActivity.java的部分。它看起来像: //Download the File on Button(Download) click: bDownload.setOnClickListener(new View.OnClickListener() { @Override public voi

如何取消从Firebase下载的任务

每当我点击
ProgressDialog
上的某个地方时,我都想取消下载

下面是我的下载活动
ExamesActivity.java
的部分。它看起来像:

//Download the File on Button(Download) click:
        bDownload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Initalizing teh Spinner-to-String functions:
                Grade = spClasse.getSelectedItem().toString();
                Type = spEpoca.getSelectedItem().toString();
                Subject = spDisciplina.getSelectedItem().toString();
                Year = spAno.getSelectedItem().toString();

                //Download the File:
                //First Check if ON the Spinner, everything is choosen. It should be. If not, show error Toast.
                if (Grade.equals("...") | Type.equals("...") | Disciplina.equals("...") | Year.equals("..."){

                    //Show the The Error Toast:
                    Toast.makeText(ExamesActivity.this, "everything shall be choosen", Toast.LENGTH_SHORT).show();

                } else {                                          //What the dir would look like: "Subject/Grade/Year-Type.extension"
                    pdfRef = mStorageRef.child(Subject + "/" + Grade + "/" + Year + "-" + Type + ".pdf");
                    File root = android.os.Environment.getExternalStorageDirectory();
                    File dir = new File(root.getAbsolutePath() + "/Exams-App/");

                    //Show the ProgressDialog while downloading:
                    progressDialog.show();

                    if (!dir.exists()) {
                        dir.mkdirs();
                    }

                    localFile = new File(dir, Subject + "-" + Year + "-" + Grade + "-" + Type + ".pdf");


                    pdfRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                            // Local temp file has been created
                            progressDialog.dismiss();
                            Toast.makeText(ExamesActivity.this, "Exam was successfully downloaded!️",  Toast.LENGTH_SHORT).show();
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            // Handle any errors
                            progressDialog.dismiss();
                            Toast.makeText(ExamesActivity.this, "Exam not found on the server.", Toast.LENGTH_LONG).show();
                        }

                    }).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
                            //Some math to get the Percentage of the Download :)
                            double progressPercentage = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                            double size = (taskSnapshot.getTotalByteCount()) / (1000000);
                            progressDialog.setMessage("PDF Size: " + (size) + " - " + ((int) progressPercentage) + "% - Click away to cancel the download.");

                        }
                    });
                }
            }
        });
//在按钮上下载文件(下载)单击:
bDownload.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//将微调器初始化为字符串函数:
Grade=spClasse.getSelectedItem().toString();
Type=spEpoca.getSelectedItem().toString();
Subject=spDisciplina.getSelectedItem().toString();
年份=spAno.getSelectedItem().toString();
//下载文件:
//首先检查微调器上是否所有内容都已选择。应该选择。如果未选择,则显示错误提示。
如果(等级等于(“…”);类型等于(“…”);纪律等于(“…”);年份等于(“…”){
//显示错误提示:
Toast.makeText(ExamesActivity.this,“一切都要选择”,Toast.LENGTH\u SHORT.show();
}else{//目录应该是什么样子:“Subject/Grade/Year Type.extension”
pdfRef=mStorageRef.child(主题+“/”+年级+“/”+年级+“-”+类型+”.pdf“);
文件根=android.os.Environment.getExternalStorageDirectory();
File dir=新文件(root.getAbsolutePath()+“/App/”;
//下载时显示ProgressDialog:
progressDialog.show();
如果(!dir.exists()){
dir.mkdirs();
}
本地文件=新文件(目录,主题+“-”+年份+“-”+等级+“-”+类型+.pdf”);
pdfRef.getFile(localFile).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(FileDownloadTask.TaskSnapshot TaskSnapshot){
//已创建本地临时文件
progressDialog.disclose();
Toast.makeText(ExameActivity.this)考试已成功下载!️",  吐司。长度(短)。show();
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理任何错误
progressDialog.disclose();
Toast.makeText(ExamesActivity.this,“在服务器上找不到考试。”,Toast.LENGTH_LONG.show();
}
}).addOnProgressListener(新的OnProgressListener(){
@凌驾
public void onProgress(FileDownloadTask.TaskSnapshot TaskSnapshot){
//获取下载百分比的一些数学公式:)
double progressPercentage=(100.0*taskSnapshot.GetByTestTransferred())/taskSnapshot.getTotalByteCount();
double size=(taskSnapshot.getTotalByteCount())/(1000000);
setMessage(“PDF大小:”+(大小)+“-”+((int)progressPercentage)+“%-单击以取消下载。”);
}
});
}
}
});

pdfRef.[getFile][1](localFile)
返回一个。此对象是的子类,它有一个
cancel()
方法。您需要保留对此任务的引用并调用其cancel方法来取消下载。

以下是我实现的解决方案:

>
OnProgressListener
上,我创建了一个
\u storageTask
变量,该变量为
storageTask
类型,并存储快照的
任务。此外,还使该变量可以全局访问

....
StorageTask _storageTask; //global variable
..... 
 .addOnProgressListener(snapshot -> { _storageTask = snapshot.getTask()});
....
>创建了一个方法
CancelUpload()
,当需要取消上载过程时可以调用该方法

private void cancelUploading()
{
    //Cancel the uploading process to the firebase storage.
    _storageTask.cancel();
    _storageTask.addOnCanceledListener(() -> Toast.makeText(AssignAnnounceActivity.this, "Uploading", Toast.LENGTH_SHORT).show());
}

NB:您可以在需要取消上载过程时使用该方法。

是否还有取消getMetadata调用的方法?它返回com.google.android.gms.tasks.Task,因此没有可用的cancel()方法。
private void cancelUploading()
{
    //Cancel the uploading process to the firebase storage.
    _storageTask.cancel();
    _storageTask.addOnCanceledListener(() -> Toast.makeText(AssignAnnounceActivity.this, "Uploading", Toast.LENGTH_SHORT).show());
}