【问题标题】:Upload multiple images in firebase android在firebase android中上传多个图像
【发布时间】:2019-12-21 15:48:22
【问题描述】:

当用户点击上传按钮时,我尝试上传多张图片。这里我的问题是当我点击上传时,只会上传一张图片,我想一次上传两张图片。我不知道我在哪里做错了。请解决

Upload two images

下面是我的代码

public class UserDocument extends AppCompatActivity {

    Integer REQUEST_CAMERA = 1, SELECT_FILE = 0;
    CardView dl_front, dl_back;
    private static final int MY_CAMERA_REQUEST_CODE = 100;
    ImageView dlFront, dlBack;
    private boolean isDlBack = false;
    private boolean isDlFront = false;

    CustomerDocument currDocument;

    Button btnUpload;
    FirebaseStorage storage;
    StorageReference storageReference;

    Uri saveUri;

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_document);
        storage = FirebaseStorage.getInstance();
        storageReference = storage.getReference();

        dl_front = (CardView) findViewById(R.id.frameFrontSide_holder); // creating a CardView and assigning a value.
        dl_back = (CardView) findViewById(R.id.frameBackSide_holder); // creating a CardView and assigning a value.

        btnUpload = (Button) findViewById(R.id.btnUpload);
        dlFront = (ImageView) findViewById(R.id.frameFrontSide);
        dlBack = (ImageView) findViewById(R.id.frameBackSide);


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

                isDlBack = false;
                isDlFront = true;
                //                Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //                startActivityForResult(intent,0);
                SelectImage();
            }
        });
        dl_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                isDlFront = false;
                isDlBack = true;
                //                Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //                startActivityForResult(intent,0);
                SelectImage();
            }
        });

        if (checkSelfPermission(Manifest.permission.CAMERA) !=
            PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[] {
                    Manifest.permission.CAMERA
                },
                MY_CAMERA_REQUEST_CODE);
        }
        btnUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                uploadImage();
            }
        });
    }
    private void uploadImage() {

        if (saveUri != null) {
            final ProgressDialog mDialog = new ProgressDialog(this);
            mDialog.setMessage("Uploading...");
            mDialog.show();

            String imageName = UUID.randomUUID().toString();
            final StorageReference imageFolder = storageReference.child("images/" + imageName);
            imageFolder.putFile(saveUri)
                .addOnSuccessListener(new OnSuccessListener < UploadTask.TaskSnapshot > () {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        mDialog.dismiss();
                        Toast.makeText(UserDocument.this, "Uploaded !!!", Toast.LENGTH_SHORT).show();
                        imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener < Uri > () {
                            @Override
                            public void onSuccess(Uri uri) {
                                // currDocument = new CustomerDocument(Common.currentUser,uri.toString(),uri.toString());

                            }
                        });

                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        mDialog.dismiss();
                        Toast.makeText(UserDocument.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }).addOnProgressListener(new OnProgressListener < UploadTask.TaskSnapshot > () {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                        mDialog.setMessage("Uploaded " + progress + "%");


                    }
                });

        }
    }


    private void SelectImage() {

        final CharSequence[] items = {
            "Camera",
            "Gallery",
            "Cancel"
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(UserDocument.this);
        builder.setTitle("Add Image");

        builder.setItems(items, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                if (items[i].equals("Camera")) {

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

                } else if (items[i].equals("Gallery")) {

                    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    intent.setType("image/*");
                    //startActivityForResult(intent.createChooser(intent, "Select File"), SELECT_FILE);
                    startActivityForResult(intent, SELECT_FILE);

                } else if (items[i].equals("Cancel")) {
                    dialogInterface.dismiss();
                }
            }
        });
        builder.show();

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

        if (resultCode == Activity.RESULT_OK) {

            if (requestCode == REQUEST_CAMERA) {

                Bundle bundle = data.getExtras();
                final Bitmap bmp = (Bitmap) bundle.get("data");
                if (isDlFront == true)
                    dlFront.setImageBitmap(bmp);
                else if (isDlBack == true)
                    dlBack.setImageBitmap(bmp);

            } else if (requestCode == SELECT_FILE) {

                saveUri = data.getData();
                if (isDlFront == true)
                    dlFront.setImageURI(saveUri);
                else if (isDlBack == true)
                    dlBack.setImageURI(saveUri);
            }

        }
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
    @Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == MY_CAMERA_REQUEST_CODE) {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();

            } else {

                Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();

            }

        }
    }
}

【问题讨论】:

    标签: android firebase firebase-storage


    【解决方案1】:

    您正在覆盖这部分中的saveUri 变量。

    saveUri = data.getData();
    if (isDlFront == true)
         dlFront.setImageURI(saveUri);
    else if (isDlBack == true)
         dlBack.setImageURI(saveUri);
    

    您可以声明另一个变量saveUrifrontsaveUriback 并将您的 if 语句更改为:

    if (isDlFront == true)
         saveUrifront = data.getData();
         dlFront.setImageURI(saveUri);
    else if (isDlBack == true)
         saveUriback = data.getData();
         dlBack.setImageURI(saveUri);
    

    现在上传方法 uploadImage() 调用 imageFolder.putFile() 中的两个图像,同时使用 saveUrifrontsaveUriback 使用 for 循环或仅调用该方法两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-13
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 2021-05-12
      • 2018-07-04
      相关资源
      最近更新 更多