Как загрузить несколько изображений в базу данных Firebase - PullRequest
0 голосов
/ 08 марта 2019

В своем профиле приложения я хочу разрешить пользователям загружать два типа изображений: изображение профиля и изображение обложки, но я застрял, потому что не знаю, какой правильный подход выбрать. я успешно выполнил код для изображения профиля пользователя, и единственная проблема, с которой я сталкиваюсь сейчас, это изображение обложки.

ниже приведен код, который выбирает изображение обложки с устройства

new AlertDialog.Builder(SettingsActivity.this)
                    .setTitle("Change Cover")
                    // .setMessage("Change Cover")
                    .setPositiveButton("CHANGE", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {

                            Intent galleryIntent = new Intent();
                            galleryIntent.setType("image/*");
                            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

                            startActivityForResult(Intent.createChooser(galleryIntent, "SELECT IMAGE"), GALLERY_PICKER);

                        }


                    })
                    .show();

А это для изображения профиля

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


            Intent galleryIntent = new Intent();
            galleryIntent.setType("image/*");
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(galleryIntent, "SELECT IMAGE"), GALLERY_PICK);

        }
    });

И это код, который обрабатывает обе задачи

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

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

                mPdialog = new ProgressDialog(SettingsActivity.this);
        mPdialog.setTitle("Uploading");
        mPdialog.setMessage("please wait....");
        mPdialog.show();

        Uri imageUri = data.getData();

        CropImage.activity(imageUri)
                .setAspectRatio(1, 1)
                .setMinCropWindowSize(500,500)
                .start(SettingsActivity.this);
    }

    if(requestCode == GALLERY_PICKER && resultCode == RESULT_OK
            && data != null && data.getData() != null )
    {
        filePath = data.getData();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            mProfileCover.setImageBitmap(bitmap);
        }

        catch (IOException e)
        {
            e.printStackTrace();
        }
        File file_thumb = new File(filePath.getPath());

        Bitmap thumb_bitmap = new Compressor(this)
                .setMaxWidth(200)
                .setMaxHeight(200)
                .setQuality(75)
                .compressToBitmap(file_thumb);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
       // thumb_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        final byte[] thumb_byte = baos.toByteArray();

        String current_uid = mCurrentuser.getUid();

        StorageReference filepath = mImageReference.child("profile_cover").child(current_uid + ".jpg");
        final StorageReference thumb_path = mImageReference.child("profile_cover").child("thumbs").child(current_uid + ".jpg");
        filepath.putFile(filePath).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                if (task.isSuccessful()){

                    final String download_url = task.getResult().getDownloadUrl().toString();
                    UploadTask uploadTask = thumb_path.putBytes(thumb_byte);

                    uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> thumb_task) {

                            String thumb_downloadurl = thumb_task.getResult().getDownloadUrl().toString();

                            if (thumb_task.isSuccessful()){

                                Map update_hashmap = new HashMap();
                                update_hashmap.put("cover_image",download_url);
                                update_hashmap.put("cover_thumb", thumb_downloadurl);

                                mDatabase.updateChildren(update_hashmap).addOnCompleteListener(new OnCompleteListener() {
                                    @Override
                                    public void onComplete(@NonNull Task task) {
                                        if (task.isSuccessful()){
                                            mPdialog.dismiss();
                                            Toast.makeText(SettingsActivity.this,"success",Toast.LENGTH_LONG).show();
                                        }

                                    }
                                });
                            }else {
                                Toast.makeText(SettingsActivity.this,"failed",Toast.LENGTH_LONG).show();
                                mPdialog.dismiss();
                            }
                        }
                    });

                }

            }
        });
    }
 if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if (resultCode == RESULT_OK) {
            Uri resultUri = result.getUri();

            File file_thumb = new File(resultUri.getPath());

            String current_uid = mCurrentuser.getUid();

            Bitmap thumb_bitmap = new Compressor(this)
                    .setMaxWidth(200)
                    .setMaxHeight(200)
                    .setQuality(75)
                    .compressToBitmap(file_thumb);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            thumb_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            final byte[] thumb_byte = baos.toByteArray();

//the rest of the profile image task

Но я сейчас растерялся, потому что думал об этом
startActivityForResult(Intent.createChooser(galleryIntent, "SELECT IMAGE"), GALLERY_PICK); и

startActivityForResult(Intent.createChooser(galleryIntent, "SELECT IMAGE"), GALLERY_PICKER);

следует дифференцировать задачи, но это не совсем так. когда изображение загружено, вызывается CropImage, и загруженное изображение также заменяет текущее изображение профиля, хотя папки создаются в базе данных, как и ожидалось.

Пожалуйста, как правильно решать обе задачи без помех

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...