1

I'm trying to upload an image taken from the camera to the firebase storage, an message dialog appears but it keeps on charging and no images are uploaded to the storage. Also I'd like to know, how can I get back the image sent from a specific user? should I give the image the user name to the image so I can get it back with his name?

public class ProfileActivity extends AppCompatActivity { public static final int CAMERA_REQUEST = 10; private LocationService service; private Button uploadbtn; private ImageView imgSpecimentPhoto; private ImageView imgSpecimentPhoto2; private ImageView imgSpecimentPhoto3; private StorageReference storage; private ProgressDialog mProgress; Uri photoURI; String mCurrentPhotoPath; private File createImageFile() throws IOException{ //Create an image file name String timeStamp = new SimpleDateFormat( "yyyyMMdd_HHmmss" ).format( new Date()); String imageFileName = "JPEG_" + timeStamp + "_."; File storageDir = getExternalFilesDir( Environment.DIRECTORY_PICTURES ); File image = File.createTempFile( imageFileName, ".jpg", storageDir ); mCurrentPhotoPath = image.getAbsolutePath(); return image; } private void dispatchTakePictureIntent(){ Intent takePictureIntent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE); if(takePictureIntent.resolveActivity( getPackageManager())!= null){ //Create the file where the photo should go File photoFile = null; try{ photoFile = createImageFile(); }catch (IOException ex){ System.out.println("error taking the pic"); } //Continue only if the file was successfull if(photoFile != null){ photoURI = FileProvider.getUriForFile( this, "com.example.android.fileprovider",photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); startActivityForResult( takePictureIntent, CAMERA_REQUEST ); } } } private View currentView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile ); service = new LocationService(this); uploadbtn = (Button) findViewById(R.id.upload); storage = FirebaseStorage.getInstance().getReference(); mProgress = new ProgressDialog( this ); //get access to the image view imgSpecimentPhoto = findViewById(R.id.camerabtn); imgSpecimentPhoto2 = findViewById(R.id.camerabtn5 ); imgSpecimentPhoto3 = findViewById(R.id.camerabtn6); uploadbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mProgress.setMessage("Uploading..."); mProgress.show(); dispatchTakePictureIntent(); } } ); } public void checkPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ) {//Can add more as per requirement ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 123); } } public void btnTakePhotoClicked(View v) { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST); System.out.println("first"); currentView= v; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); photoURI = data.getData(); //did the user chose okay if(requestCode == CAMERA_REQUEST && resultCode == RESULT_OK){ //we are hearing back grom the camera Bitmap cameraImage = (Bitmap) data.getExtras().get( "data" ); //now we have the image ImageView cur = (ImageView) currentView; cur.setImageBitmap( cameraImage ); if (cur.getId() == imgSpecimentPhoto.getId()) { imgSpecimentPhoto2.setVisibility( View.VISIBLE ); } if (cur.getId() == imgSpecimentPhoto2.getId()) { imgSpecimentPhoto3.setVisibility( View.VISIBLE ); StorageReference filepath = storage.child("Photos").child( photoURI.getLastPathSegment()); filepath.putFile( photoURI).addOnSuccessListener( new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Toast.makeText(ProfileActivity.this, "Upload Successfull", Toast.LENGTH_SHORT).show(); mProgress.dismiss(); } } ).addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText( ProfileActivity.this, "Upload Failed", Toast.LENGTH_SHORT).show(); } } ); } } }} 
2

2 Answers 2

1

when upload image on Firebase used below code ...

 bearImage.setDrawingCacheEnabled(true); bearImage.buildDrawingCache(); Bitmap bitmap = bearImage.getDrawingCache(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] data = baos.toByteArray(); // Upload it to our reference UploadTask uploadTask = bearRef.putBytes(data); buttonDownload.setEnabled(false); uploadTask.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle unsuccessful uploads progressDialog.dismiss(); Log.w(LOG_TAG, "Upload failed: " + exception.getMessage()); } }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. Uri downloadUrl = taskSnapshot.getDownloadUrl(); progressDialog.dismiss(); Log.d(LOG_TAG, "Download Url: " + downloadUrl); buttonDownload.setEnabled(true); } }); 

remove code for not need in above code..

Sign up to request clarification or add additional context in comments.

7 Comments

bearImage is ImageView control object.
it gives me this error Cannot upload to getRoot. You should upload to a storage location such as .getReference('image.png').putFile...
you make folder in firebase storage like below code .. FirebaseStorage storage = FirebaseStorage.getInstance(); StorageReference rootRef = storage.getReference(); StorageReference bearRef = rootRef.child("images/bear.jpg"); In Firebase storage create images folder then upload bear.jpg image.
Thanks for getting back to me. It gives me the same error
If you want to then provide my full demo for upload and download image from firebase storage .
|
0

About getting the image back with the username, I would upload the photo in the storage with the following path:

// storage/photos/users/userID/photoName StorageReference storageReference = FirebaseStorage .getInstanace().getReference .child("photos/users/" + user_id + "/photoName"); 

And then I would create a photos node in data base where I would add the userID and then the picture. Something like that: In this specific case I am storing the user's profile photo into the database. ProfilePhoto model is just the profile image url.

ProfilePhoto profilePhoto = new ProfilePhoto(profile_img_url); myRef.child("photos").child(user_id).child("photoName").setValue(profile_img_url); 

By this way, when I want some user's photo I just get the link from database specifing the userID.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.