首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >getDownloadUrl函数未返回正确的url

getDownloadUrl函数未返回正确的url
EN

Stack Overflow用户
提问于 2018-06-05 01:22:30
回答 2查看 666关注 0票数 0

我正在上传一个pdf到Firebase存储,并想得到它的下载网址。我使用了以下代码:

代码语言:javascript
复制
@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);
}

行的结果

代码语言:javascript
复制
String download_url = task.getResult().getMetadata().getReference().getDownloadUrl().toString();

"com.google.android.gms.tasks.zzu@7f93358“是否不是正确的url

问题的解决方案是使用upload任务,在它的完整监听器中编写代码,以Uri的形式获取任务的结果,并将其转换为字符串

代码语言:javascript
复制
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
                            // ...
                        }
                    }
                });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-05 01:27:55

getDownloadUrl()不返回URL。正如您在the javadoc中看到的那样,它返回一个产生URL的任务。您必须等待此任务完成,才能获得最终的URL。

票数 1
EN

Stack Overflow用户

发布于 2018-09-04 18:24:47

//试试这个

代码语言:javascript
复制
Task<Uri> newTask = task.getResult().getMetadata().getReference().getDownloadUrl();
            newTask.addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    yourUriVariable= uri;
                }
            });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50685756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档