2017-08-16 107 views
0

我正在使用Firebase存儲來存儲圖像。我無法在Android上下載這些內容。我想下載文件夾的所有圖像,但現在我只想下載一個,因爲我不知道如何將所有圖像作爲列表下載。 我想這如何從Android上的Firebase存儲下載圖像?

public static final String TAG = "AtividadesFragment"; 
    ImageView imageView; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_atividades,container,false); 
     Log.i(TAG,"onCreateView()"); 
     imageView = (ImageView) v.findViewById(R.id.image); 
     return v; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     FirebaseStorage storage = FirebaseStorage.getInstance(); 
     StorageReference ref = storage.getReference().child("ImagensExercicios/abdominal_1.bmp"); 

     Glide.with(getActivity()).using(new FirebaseImageLoader()).load(ref).into(imageView); 
    } 

XML:

<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</android.support.constraint.ConstraintLayout> 

但沒有任何反應。

enter image description here

回答

1

我使用以下代碼從Firebase存儲中獲取jpg圖像。 爲了獲得bmp圖像,我認爲它們的區別將在File.createTempFile(「Images」,「jpg」)//或bmp的參數中。 我希望它也適用於你。

private Bitmap my_image; 
StorageReference ref = storage.getReference().child("ImagensExercicios/abdominal_1.bmp"); 
try { 
     final File localFile = File.createTempFile("Images", "bmp"); 
     ref.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 
       my_image = BitmapFactory.decodeFile(localFile.getAbsolutePath()); 
      } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception e) { 
       Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 

還有一點需要注意的是,我在AsyncTask類中使用這段代碼來實現異步任務行爲。

2

你想一個StorageReference加載到ImageView的與滑翔:

StorageReference ref = storage.getReference().child("ImagensExercicios/abdominal_1.bmp"); 
Glide.with(getActivity()).using(new FirebaseImageLoader()).load(ref).into(imageView); 

這StorageReference沒有對象的方式工作。 StorageReference只是指向存儲桶中文件的指針。如果你想下載它的內容,你需要fetch a download URL from it first,等待該任務異步完成,然後使用該URL加載到ImageView中。

0

所以,我想:

FirebaseStorage storage = FirebaseStorage.getInstance(); 
    storage.getReference().child("ImagensExercicios/abdominal_1.bmp").getDownloadUrl(). 
      addOnCompleteListener(new OnCompleteListener<Uri>() { 
       @Override 
       public void onComplete(@NonNull Task<Uri> task) { 
        Log.i(TAG,"onComplete()"); 
       } 
      }). 
      addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception e) { 
        Log.i(TAG,"onFailure() " + e.getMessage()); 
       } 
      }). 
      addOnSuccessListener(new OnSuccessListener<Uri>() { 
       @Override 
       public void onSuccess(Uri uri) { 
        Log.i(TAG,"onSuccess()"); 
       } 
      }); 

如何我得到的文件?如果可能,我如何下載所有文件?