Not able to upload an Image in Firebase Storage

330
April 25, 2017, at 2:06 PM

This is the my code ( check this file full code on GitHub) for Uploading an image to Firebase Storage.

// ImagePickerButton shows an image picker to upload a image for a message
    mPhotoPickerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent();
            i.setType("image/*");
            i.setAction(Intent.ACTION_GET_CONTENT);
            i.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
            startActivityForResult(Intent.createChooser(i, "Complete action using"), RC_PHOTO_PICKER);
        }
    });

This is the OnActivityResult Method:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK) {
      Uri selectedImageUri = data.getData();
      //get the reference to stored file at database
      StorageReference selectedImageFilePath = mStorageReference.child(selectedImageUri.getLastPathSegment());
      //upload file to firebase
      selectedImageFilePath.putFile(selectedImageUri).addOnSuccessListener(MainActivity.this, new OnSuccessListener < UploadTask.TaskSnapshot > () {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
          @SuppressWarnings("VisibleForTests")
          String downloadUrl = taskSnapshot.getDownloadUrl().toString();
          Message message = new Message(null, userName, downloadUrl);
          messagesDatabaseReference.push().setValue(message);
        }
      });
    }
  }
}

Picking an Image from the Gallery works fine but I'm not able to upload the selected Image on Firebase Storage. Correct my code If I'm wrong at any site. However, I manually entered these lines in my manifest file

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

I'm currently running the app in my own mobile device connected via USB( Moto G4 - Nougat)

Answer 1

data.getData() could return an URI that does not point to a File.

You should use InputStream is = getContentResolver().openInputStream(data.getData()) and than use selectedImageFilePath.putStream(is)

Also you could add an onFailureListener to the upload task and debug what is going wrong.

In addition, if I recall correctly, I do not think you need the storage permissions when you directly read the data in onActivityResult.

Answer 2

this is what I have done

String image_path = selectedImageUri.getPath();
Uri uploadUri = Uri.fromFile(new File(image_path));
  //then your code
  selectedImageFilePath.putFile(uploadUri).addOnSuccessListener(taskSnapshot -> {
  //do your stuff
});
Answer 3

Try this for button click :

//Select Image functionality
    btnselectImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, 2);
        }
    });

For saving image to fire base :

//Storing and getting image from firebase
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){
        final Uri uri = data.getData();
        StorageReference filepath = mStorageRef.child("Photos").child(name);
        filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Uri downloadUri = taskSnapshot.getDownloadUrl();
                //Getting url where image is stored
                saveImage(downloadUri);
                Picasso.with(getActivity()).load(downloadUri).fit().centerCrop().into(profileImage);
            }
        });
    }

This works fine for me, Hope this will help.

Rent Charter Buses Company
READ ALSO
How to change a PreferenceFragment style/theme?

How to change a PreferenceFragment style/theme?

I have a PreferenceFragment and I want to change the background, text color, and a couple other things however I can't find a way to change the fragments style without affecting other fragments in my app

414
I use android.hardware.camera2, CDS enable 0 num_str 1 applied 0 stream_id 5

I use android.hardware.camera2, CDS enable 0 num_str 1 applied 0 stream_id 5

I'm using camera2 to record video,There was an error

355
Querying vs Scanning practice for specific scenario DynamoDB

Querying vs Scanning practice for specific scenario DynamoDB

There seems to be about a hundred ways of retrieving items in dynamo dbI have heard that Querying is only for Hash and Range Key values, however the, I have also seen that scanning is very slow and expensive on memory for my read and write units

436
Android Snackbar covering the control buttons in Google Pixel

Android Snackbar covering the control buttons in Google Pixel

The Snackbar covers the control buttons of the Google Pixel deviceThe device is running Nougat and the screenshot illustrates the issue:

274