Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrieve stored image from Firebase Storage

I am trying to store and retrieve image by using Firebase. It is okay when storing an image, but I can't show it in an ImageView. It doesn't give an error so I can't understand where is the mistake.

public class MainActivity extends AppCompatActivity {

private Button btnSelectImage;
private ImageView mImageView;

private StorageReference mStorage;

private static final int CAMERA_REQUEST_CODE = 1 ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnSelectImage = (Button) findViewById(R.id.btn_image);
    mImageView = (ImageView) findViewById(R.id.imageView);

    //Get instance
    mStorage = FirebaseStorage.getInstance().getReference();

    btnSelectImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, CAMERA_REQUEST_CODE);

        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode==CAMERA_REQUEST_CODE && resultCode==RESULT_OK){

        Uri uri = data.getData();

        StorageReference filePath = mStorage.child("CameraPhotos").child(uri.getLastPathSegment());
        filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                //Show image
                Uri downloadUri = taskSnapshot.getDownloadUrl();
                Picasso.with(MainActivity.this).load(downloadUri).into(mImageView);

                Toast.makeText(MainActivity.this,"Upload Done",Toast.LENGTH_SHORT).show();
                Log.v("Test","image load");

            }
        });


    }
}
}

Also give permissions

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Here is my Firebase Storage Rules

service firebase.storage {
  match /b/fir-app-ce89f.appspot.com/o {
    match /{allPaths=**} {
      allow read, write: if true;
    }
  }
}

Here is my Activity Layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.yusuf.firebaseapp.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Select Image"
        android:id="@+id/btn_image"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <ImageView
        android:layout_width="400dp"
        android:layout_height="350dp"
        android:id="@+id/imageView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>
like image 478
ysfcyln Avatar asked Sep 26 '16 12:09

ysfcyln


People also ask

How do I recover files from Firebase storage?

Once you have a reference, you can download files from Cloud Storage by calling the getBytes() or getStream() . If you prefer to download the file with another library, you can get a download URL with getDownloadUrl() .

How can I get image URL from Firebase storage web?

Image URL is obtained by uploading an image to firebase bucket and then that can return back a URL that URL is a permanent URL which can be open anywhere. Then a user can use this URL for any purpose in its application.


1 Answers

I suggest taking a look at FirebaseUI 0.6, which includes a Glide plugin that makes downloading an image from Firebase Storage as simple as:

// Reference to an image file in Firebase Storage
StorageReference storageReference = ...;

// ImageView in your Activity
ImageView imageView = ...;

// Load the image using Glide
Glide.with(this /* context */)
        .using(new FirebaseImageLoader())
        .load(storageReference)
        .into(imageView);
like image 113
Mike McDonald Avatar answered Oct 19 '22 00:10

Mike McDonald