Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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 getDownloadUrl函数不使用';t返回正确的url_Java_Android_Firebase_Firebase Storage - Fatal编程技术网

Java getDownloadUrl函数不使用';t返回正确的url

Java getDownloadUrl函数不使用';t返回正确的url,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,我正在将pdf上传到Firebase存储,并希望获得其下载url。我正在使用以下代码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1212: if (resultCode == RESULT_OK) { String File

我正在将pdf上传到Firebase存储,并希望获得其下载url。我正在使用以下代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1212:
            if (resultCode == RESULT_OK) {
                String FilePath = data.getDataString();
                t.setText(FilePath);
                Uri pdfuri = data.getData();
                final StorageReference mp = mpdf.child("pdf").child(random()+".pdf");
                mp.putFile(pdfuri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                        if(task.isSuccessful())
                        {
                            String download_url = task.getResult().getMetadata().getReference().getDownloadUrl().toString();
                            String parent = getIntent().getStringExtra("type").toString();
                            String ch = getIntent().getStringExtra("value").toString();
                            GeologicDatabase.modifySingle(parent,ch,download_url);
                            Toast.makeText(modifypdf.this,download_url , Toast.LENGTH_SHORT).show();
                            finish();
                        }
                        else {
                            Toast.makeText(modifypdf.this,"Faild" , Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}
是 “com.google.android.gms.tasks。zzu@7f93358" 不是正确的url


问题的解决方案是使用upload任务,在它的in-Complete侦听器中编写代码,将任务的结果作为Uri,并将其转换为字符串

final String name = random() + ".pdf";
                dp = mpdf.child("pdf").child(name);
                UploadTask uploadTask = dp.putFile(pdfuri);
                Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                    @Override
                    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                        if (!task.isSuccessful()) {
                            throw task.getException();
                        }

                        // Continue with the task to get the download URL
                        return dp.getDownloadUrl();
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        if (task.isSuccessful()) {
                            tt = title.getText().toString();
                            Uri downloadUri = task.getResult();
                            String download_url = downloadUri.toString();
                            String parent = getIntent().getStringExtra("type").toString();
                            String ch = getIntent().getStringExtra("value").toString();
                            GeologicDatabase.updateChild(parent, ch, "url",download_url,tt);
                            GeologicDatabase.updateChild(parent,ch,"name",name,tt);
                            Toast.makeText(addpdf.this, download_url, Toast.LENGTH_SHORT).show();
                            finish();
                        } else {
                            // Handle failures
                            // ...
                        }
                    }
                });
final String name=random()+“.pdf”;
dp=mpdf.child(“pdf”).child(姓名);
UploadTask UploadTask=dp.putFile(pdfuri);
Task urlTask=uploadTask.continueWithTask(新的Continuation(){
@凌驾
公共任务(@NonNull Task Task)引发异常{
如果(!task.issusccessful()){
抛出task.getException();
}
//继续执行任务以获取下载URL
返回dp.getDownloadUrl();
}
}).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
tt=title.getText().toString();
Uri downloadUri=task.getResult();
String download_url=downloadUri.toString();
字符串父级=getIntent().getStringExtra(“类型”).toString();
字符串ch=getIntent().getStringExtra(“值”).toString();
updateChild(父项,ch,“url”,下载\u url,tt);
updateChild(父项,ch,“name”,name,tt);
Toast.makeText(addpdf.this,下载_url,Toast.LENGTH_SHORT).show();
完成();
}否则{
//处理故障
// ...
}
}
});
不返回URL。从中可以看到,它返回一个生成URL的任务。您必须等待此任务完成才能获取最终URL。

不返回URL。从中可以看到,它返回一个生成URL的任务。您必须等待此任务完成,才能获得最终URL。

//尝试此任务

Task<Uri> newTask = task.getResult().getMetadata().getReference().getDownloadUrl();
            newTask.addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    yourUriVariable= uri;
                }
            });
Task newTask=Task.getResult().getMetadata().getReference().getDownloadUrl();
newTask.addOnSuccessListener(新OnSuccessListener(){
@凌驾
成功时的公共无效(Uri){
yourUriVariable=uri;
}
});
//试试这个

Task<Uri> newTask = task.getResult().getMetadata().getReference().getDownloadUrl();
            newTask.addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    yourUriVariable= uri;
                }
            });
Task newTask=Task.getResult().getMetadata().getReference().getDownloadUrl();
newTask.addOnSuccessListener(新OnSuccessListener(){
@凌驾
成功时的公共无效(Uri){
yourUriVariable=uri;
}
});

根据您的回答,我认为我应该重写onComplete方法,但要在内部编写什么来获得下载urlStack溢出不是一个代码编写服务。请查阅文档并亲自尝试一下。然后,如果你仍然陷入困境,问另一个问题,描述问题和你迄今为止的尝试。谢谢,但这不是关于代码编写的我试过了,但它不起作用,我搜索了,但找不到,我实现了,但我是一个初学者,文档对我来说还不够,这是一个非常简单的解决方案,有一个可以根据您的答案定制的代码示例,以获得我的目标。我认为我应该重写onComplete方法,但要在其中编写什么来获得下载urlStack溢出,并不是一个代码编写服务。请查阅文档并亲自尝试一下。然后,如果你仍然陷入困境,问另一个问题,描述问题和你迄今为止的尝试。谢谢,但这真的不是关于代码编写,我试过了,但它不起作用,我搜索了,我找不到它,我实现了,但我是一个初学者,文档对我来说还不够,它是一个非常简单的解决方案,有一个可以定制的代码示例来实现我的目标