将捕获的图像传递给FilePathUri

时间:2018-05-19 08:42:25

标签: java android firebase android-camera

我有问题将捕获的图像传递到FilePathUri,然后存储图像然后上传到Firebase。我需要将它们集成在一起,因为FilePathUri总是返回null。

希望有人能给我看一个代码示例。感谢

创建方法

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

    // Assign FirebaseStorage instance to storageReference.
    storageReference = FirebaseStorage.getInstance().getReference();

    // Assign FirebaseDatabase instance with root database name.
    databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);

    //Assign ID'S to button.
    ChooseButton = (Button)findViewById(R.id.ButtonChooseImage);
    UploadButton = (Button)findViewById(R.id.ButtonUploadImage);

    // Assign ID's to EditText.
    ImageName = (EditText)findViewById(R.id.ImageNameEditText);

    // Assign ID'S to image view.
    SelectImage = (ImageView)findViewById(R.id.ShowImageView);

    // Assigning Id to ProgressDialog.
    progressDialog = new ProgressDialog(PhotoActivity.this);

    // Adding click listener to Choose image button.
    ChooseButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, FilePathUri);
                    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        }
    });

OnActivity

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

    super.onActivityResult(requestCode, resultCode, data);

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

        // Line 1: 
        FilePathUri = data.getData();

        // Line 2: 
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        SelectImage.setImageBitmap(photo);
        ChooseButton.setText("Image Selected");
    }
}

上传图片部件

// Creating UploadImageFileToFirebaseStorage method to upload image on storage.
public void UploadImageFileToFirebaseStorage() {

    // Checking whether FilePathUri Is empty or not.
    if (FilePathUri != null) {

        // Setting progressDialog Title.
        progressDialog.setTitle("Image is Uploading...");

        // Showing progressDialog.
        progressDialog.show();

        // Creating second StorageReference.
        StorageReference storageReference2nd = storageReference.child(Storage_Path + System.currentTimeMillis() + "." + FilePathUri);

        // Adding addOnSuccessListener to second StorageReference.
        storageReference2nd.putFile(FilePathUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                        // Getting image name from EditText and store into string variable.
                        String TempImageName = ImageName.getText().toString().trim();

                        // Hiding the progressDialog after done uploading.
                        progressDialog.dismiss();

                        // Showing toast message after done uploading.
                        Toast.makeText(getApplicationContext(), "Image Uploaded Successfully ", Toast.LENGTH_LONG).show();

                        @SuppressWarnings("VisibleForTests")
                        ImageUploadInfo imageUploadInfo = new ImageUploadInfo(TempImageName, taskSnapshot.getDownloadUrl().toString());

                        // Getting image upload ID.
                        String ImageUploadId = databaseReference.push().getKey();

                        // Adding image upload id s child element into databaseReference.
                        databaseReference.child(ImageUploadId).setValue(imageUploadInfo);
                    }
                })
                // If something goes wrong .
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {

                        // Hiding the progressDialog.
                        progressDialog.dismiss();

                        // Showing exception erro message.
                        Toast.makeText(PhotoActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                })

                // On progress change upload time.
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {

                        // Setting progressDialog Title.
                        progressDialog.setTitle("Image is Uploading...");

                    }
                });
    }
    else {

        Toast.makeText(PhotoActivity.this, "Please Select Image or Add Image Name", Toast.LENGTH_LONG).show();

    }

0 个答案:

没有答案