2017-05-18 22 views
0

Firebaseストレージに画像をアップロードするための私のコード(Xamarin.Android)はXamarin.Android:Firebase Storageからファイルをダウンロードするには?

Android.Net.Uri filePath = data.Data; 
StorageReference childRef = storageRef.Child("images/").Child(key); 
Bitmap bitmap = Android.Net.MediaStore.Images.Media.GetBitmap(this.ContentResolver, filePath); 
MemoryStream stream = new MemoryStream(); 
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream); 
byte[] bitmapData = stream.toArray(); 
UploadTask uploadTask = childRef.PutBytes(bitmapData); 

あり、それは働きます!しかし、私がファイルをダウンロードしたい場合、それは動作しません...コードは次のとおりです:

StorageReference childRef = storageRef.Child("images/").Child(childKey); 
Android.Net.Uri uri = Android.Net.Uri.Parse(childRef.ToString()); 
imageView.setImageURI(uri); 

誰でも知っていますか? childRef.DownloadURLを使用する必要がありますか?しかし、どのように(それは、Android.Gms.Tasks.Taskを返します)?ありがとうございました!

答えて

0

のコードに基づいて、download image to your memoryとしたいと思います。

public class Activity1 : Activity, IOnSuccessListener, IOnFailureListener 
{ 
    private FirebaseStorage storage; 
    private ImageView imageview; 
    private Task downloadtask; 

    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     // Create your application here 
     SetContentView(Resource.Layout.layout1); 

     //auth 
     FirebaseAuth mAuth = FirebaseAuth.Instance; 
     FirebaseUser user = mAuth.CurrentUser; 
     if (user == null) 
     { 
      var result = mAuth.SignInAnonymously(); 
     } 

     storage = FirebaseStorage.Instance; 
     //create child reference 
     StorageReference storageRef = storage.Reference; 
     StorageReference imagesRef = storageRef.Child("images"); 

     imageview = FindViewById<ImageView>(Resource.Id.imageview);  

     Button downloadimage = FindViewById<Button>(Resource.Id.downloadimage); 
     downloadimage.Click += (sender, e) => 
     { 
      //download image 
      StorageReference testRef = imagesRef.Child("test.jpg"); 

      downloadtask = testRef.GetBytes(1200 * 800); 
      downloadtask.AddOnSuccessListener(this); 
      downloadtask.AddOnFailureListener(this); 
     }; 
    } 

    public void OnFailure(Java.Lang.Exception e) 
    { 
     Log.WriteLine(LogPriority.Debug, "storage", "Failed:" + e.ToString()); 
    } 

    public void OnSuccess(Java.Lang.Object result) 
    { 
     Log.WriteLine(LogPriority.Debug, "storage", "success!"); 
     if (downloadtask != null) 
     { 
      var data = downloadtask.Result.ToArray<byte>(); 
      Bitmap bitmap = BitmapFactory.DecodeByteArray(data, 0, data.Length); 
      imageview.SetImageBitmap(bitmap); 
      downloadtask = null; 
     } 
    } 
} 

私はchildRef.DownloadURLを使用する必要がありますか:

次に、あなたはこのような例をコードすることができますか?

だから、何の「に持っている」、Android.Gms.Tasks.Task問題の結果を解決し、あなたのタスクの結果を処理するためにIOnSuccessListenerインターフェイスを実装し、OnSuccessイベントにすることができますがありません。

+0

ファイル参照(StorageReference)からファイル拡張子(私の場合は.png)を削除して動作させる必要がありました。あなたの答えはとても役に立ちました、ありがとう! – rafaelqfigueiredo

関連する問題