Xamarin.Android:获取Firebase存储下载URL

时间:2017-06-08 12:12:51

标签: android firebase xamarin xamarin.android firebase-storage

我有一个UploadTask可以将图像发送到Firebase存储,但是现在我可以获得相应的下载网址,但我还是面临一些问题。

var upload = childRef.DownloadURL;

upload.AddOnSuccessListener(this);

我实现了IOnSuccessListener接口,因此函数必须是:

public void OnSuccess(Java.Lang.Object result){
   //get url from result
}

如何转换结果以访问网址?

5 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但在添加AddOnFailureListener时能够发现错误。错误消息没有帮助。

  

发生未知错误,请检查HTTP结果代码和内部   服务器响应的异常。

结果代码为0.错误代码为-13000,根据Firebase错误表,这是一个未知错误。

   FirebaseApp.InitializeApp(Application.Context);
   FirebaseStorage storage = FirebaseStorage.Instance;
   StorageReference storageRef = storage.GetReferenceFromUrl("gs://");
   StorageReference imageRef = storageRef.Child("folder/image.jpg");

   var downloadURL = imageRef.DownloadUrl.AddOnSuccessListener(this, this).AddOnFailureListener(this, this);

    public void OnSuccess(Java.Lang.Object result)
    {

        string downloadURL = result.ToString();
    }
    public void OnFailure(Java.Lang.Exception e)
    {
        Log.Warn("FirebaseStorage", "Download Failure", e);
    }

答案 1 :(得分:0)

我在调试模式下得到了一个解决方案

我看到了downloadurl的属性并找到了Scheme和SchemeSpecificPart

  

Scheme =" https"

     

SchemeSpecificPart =" // firebasestorage.googleapis.com/v0/b/maplog-e4ba5.appspot.com/o/-L0AMbihF23YKxsL1uss?alt=media&token=5c7ccef1-c857-4982-a288-fded2f0ff1aa&# 34;

所以这是我的代码:

void IOnSuccessListener.OnSuccess(Java.Lang.Object result)
{
    var snapShot = (UploadTask.TaskSnapshot)result;
    string imgUrl = snapShot.DownloadUrl.Scheme 
    + ":" 
    + snapShot.DownloadUrl.SchemeSpecificPart;
}

它有效! 我一直在寻找解决方案:(( 但我终于找到了自己的XD

答案 2 :(得分:0)

我遇到了与-13000相同的错误代码,根据Firebase错误表,这是一个未知错误,我通过更新设备中的playstore应用解决了

答案 3 :(得分:0)

我会说EncodedSchemeSpecificPart对我来说很完美

        var snapShot = (UploadTask.TaskSnapshot)result;
        string downloadURL =snapShot.DownloadUrl.Scheme + ":" +snapShot.DownloadUrl.EncodedSchemeSpecificPart;

答案 4 :(得分:0)

对于最新的Xamarin Android,这是正确的答案

public async void OnSuccess(Java.Lang.Object result)
{
    var snapShot = (UploadTask.TaskSnapshot)result;

    if (snapShot != null)
    {
        var url = await snapShot.Storage.GetDownloadUrlAsync();
        imageUrl = url?.ToString();
    }
}