Reputation: 89
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();
}
} );
}
}
}}
Upvotes: 1
Views: 1310
Reputation: 2219
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.
Upvotes: 0
Reputation:
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..
Upvotes: 1