Сохранение нескольких путей к изображениям в базе данных в реальном времени - PullRequest
0 голосов
/ 30 ноября 2018

Я загружаю 6 изображений в хранилище Firebase и сохраняю пути к изображениям и некоторые данные в базе данных Firebase.Пока это работает, когда загружаются только все 6 изображений.

Я библиотека BSimagePicker https://github.com/siralam/BSImagePicker, чтобы выбрать несколько изображений, затем загрузить их в хранилище и сохранить пути в базе данных.

Проблема, с которой я столкнулся, заключается в том, что если я хочу загрузить менее 6 изображений, то происходит сбой, и он указывает на НЕДОСТАТОЧНЫЙ PUTFILE.Как мне сделать условие, что если uri имеет значение null, тогда все в порядке, чтобы загрузить?

Кроме того, каков наилучший подход к способу обработки пути загрузки?

Я могу 'найти руководство по загрузке нескольких файлов и сохранить их пути к базе данных в реальном времени.Все это один файл.

private void startPosting() {

    mPost.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(ImageLoader.TAG, "onClick: attempting to post...");
            if (!isEmpty(mTitle.getText().toString())
                    && !isEmpty(mDescription.getText().toString())
                    && !isEmpty(mPrice.getText().toString())
                    && !isEmpty(mCountry.getText().toString())
                    && !isEmpty(mStateProvince.getText().toString())
                    && !isEmpty(mCity.getText().toString())
                    && !isEmpty(mContactEmail.getText().toString())) {

                if (mAllUri != null ) {

                    Toast.makeText(getActivity(), "uploading image", Toast.LENGTH_SHORT).show();

                    final String postId = FirebaseDatabase.getInstance().getReference().push().getKey();

                    StorageReference filepath = FirebaseStorage.getInstance().getReference()
                            .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                                    "/" + postId + "/post_image");

                    final StorageReference filepath1 = FirebaseStorage.getInstance().getReference()
                            .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                                    "/" + postId + "/post_image1");
                    final StorageReference filepath2 = FirebaseStorage.getInstance().getReference()
                            .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                                    "/" + postId + "/post_image2");
                    final StorageReference filepath3 = FirebaseStorage.getInstance().getReference()
                            .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                                    "/" + postId + "/post_image3");
                    final StorageReference filepath4 = FirebaseStorage.getInstance().getReference()
                            .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                                    "/" + postId + "/post_image4");
                    final StorageReference filepath5 = FirebaseStorage.getInstance().getReference()
                            .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                                    "/" + postId + "/post_image5");

                    final Uri[] firebaseUri = new Uri[1];
                    final Uri[] firebaseUri1 = new Uri[1];
                    final Uri[] firebaseUri2 = new Uri[1];
                    final Uri[] firebaseUri3 = new Uri[1];
                    final Uri[] firebaseUri4 = new Uri[1];
                    final Uri[] firebaseUri5 = new Uri[1];


                    filepath.putFile(mSelectedUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            firebaseUri[0] = taskSnapshot.getDownloadUrl();

                    filepath1.putFile(mSelectedUri1).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                             firebaseUri1[0] = taskSnapshot.getDownloadUrl();

                    filepath2.putFile(mSelectedUri2).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                             firebaseUri2[0] = taskSnapshot.getDownloadUrl();

                    filepath3.putFile(mSelectedUri3).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                             firebaseUri3[0] = taskSnapshot.getDownloadUrl();

                    filepath4.putFile(mSelectedUri4).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                         public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                             firebaseUri4[0] = taskSnapshot.getDownloadUrl();

                    filepath5.putFile(mSelectedUri5).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

                            firebaseUri5[0] = taskSnapshot.getDownloadUrl();

                            Post post = new Post();
                            post.setCity(mCity.getText().toString());
                            post.setContact_email(mContactEmail.getText().toString());
                            post.setCountry(mCountry.getText().toString());
                            post.setDescription(mDescription.getText().toString());
                            post.setPost_id(postId);
                            post.setPrice(mPrice.getText().toString());
                            post.setState_province(mStateProvince.getText().toString());
                            post.setTitle(mTitle.getText().toString());
                            post.setUser_id(FirebaseAuth.getInstance().getCurrentUser().getUid());

                            post.setImage(firebaseUri[0].toString());
                            post.setImage1(firebaseUri1[0].toString());
                            post.setImage2(firebaseUri2[0].toString());
                            post.setImage3(firebaseUri3[0].toString());
                            post.setImage4(firebaseUri4[0].toString());
                            post.setImage5(firebaseUri5[0].toString());


                            reference.child(getString(R.string.node_posts))
                                    .child(postId)
                                    .setValue(post);
                            showProgressBar();
                            resetFields();

                        }

                    });
                        }//file4
                    });//file4
                        } //file3
                    }); //file3
                        }//file2
                    }); //file2
                        }//file1
                    });//file1
                        }
                    });
                }

           //
            }
        }

    });
}

Вот функция, которая извлекает uri:

@Override
public void onMultiImageSelected(List<Uri> uriList, String tag) {
    for (int i = 0; i < uriList.size(); i++) {
        mAllUri = uriList.get(i);
        if (i >= 6) return;
        ImageView iv;
        switch (i) {
            case 0:
                iv = ivImage1;
                mSelectedUri = uriList.get(0);
                Log.d(ImageLoader.TAG, "aissa image" + mSelectedUri);

                break;
            case 1:
                iv = ivImage2;
                mSelectedUri1 = uriList.get(1);
                Log.d(ImageLoader.TAG, "aissa1 image" + mSelectedUri1);
                break;
            case 2:
                iv = ivImage3;
                mSelectedUri2 = uriList.get(2);
                break;
            case 3:
                iv = ivImage4;
                mSelectedUri3 = uriList.get(3);
                break;
            case 4:
                iv = ivImage5;
                mSelectedUri4 = uriList.get(4);
                break;
            case 5:
            default:
                iv = ivImage6;
                mSelectedUri5 = uriList.get(5);
        }
        Glide.with(this).load(uriList.get(i)).into(iv);

    }
}

Полный класс: https://pastebin.com/BR6M8jC2

1 Ответ

0 голосов
/ 30 ноября 2018

Исходя из того, что я понимаю по вашему вопросу, вы хотите, чтобы в вашем ImageView был способ, который не помещал бы ноль.

Для этого вы можете просто проверить, является ли элемент, который вы извлекаете из ArrayList,null или нет, другими словами, просто поместите оператор if перед тем, как поместить их в свои mSelectedURi переменные.

Итак, последний код, который вы поместили, должен выглядеть примерно так:

@Override
public void onMultiImageSelected(List<Uri> uriList, String tag) {
    for (int i = 0; i < uriList.size(); i++) {
        mAllUri = uriList.get(i);
        if (i >= 6) return;
        ImageView iv;
        switch (i) {

            case 1:
                iv = ivImage2;
                if(uriList.get(1)!=null && !uriList.get(1).equals("")){
                     mSelectedUri1 = uriList.get(1);
                     Log.d(ImageLoader.TAG, "aissa1 image" + mSelectedUri1);
                }
                else
                  // do something when it is null, like displaying a toast or something

                break;

            case 2:
            // do this for all these cases
    }

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