Опубликовать два изображения URL в базе данных Firebase - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь добавить второй URL в базу данных.Я попробовал несколько других подходов и не ушел далеко.Я пробовал загружать каждого по отдельности, но тогда это создавало двух детей.В итоге я получил ответ от Загрузка нескольких изображений на Firebase - Android Studio и вот я здесь.

Вот что я пытаюсь достичь:

 posts
      -LRTx-3WJNP2zxifv7h9
         city:
         contact_email:
         country:
         description:
         image:  URL IMAGE IN STORAGE
         image1:  URL IMAGE1 IN STORAGE
         post_id:
         price:
         state_province:
         title:
         user_id: 

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

posts
      -LRTx-3WJNP2zxifv7h9
         city:
         contact_email:
         country:
         description:
         image:  URL IMAGE IN STORAGE
         post_id:
         price:
         state_province:
         title:
         user_id: 

Код:

if( mSelectedUri !=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").child(mSelectedUri.getLastPathSegment());

StorageReference filepath1 = FirebaseStorage.getInstance().getReference()
        .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                "/" + postId + "/post_image1").child(mSelectedUri1.getLastPathSegment());




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

    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


        Uri firebaseUri = taskSnapshot.getDownloadUrl();

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

        Post post = new Post();
        post.setImage(firebaseUri.toString());
      //  post.setImage1(firebaseUri.toString());

        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());

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



    }


});




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

    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


        Uri firebaseUri = taskSnapshot.getDownloadUrl();

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

        Post post = new Post();
        post.setImage1(firebaseUri.toString());

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

       // resetFields();



    }


});

};

1 Ответ

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

2 вещи, которые нужно запомнить:

1) Слушатели Firebase не являются синхронными по своей природе.Последовательность, в которой вы написали слушателям, может не соблюдаться.

2) Когда вы пишете в локации в Firebase, он заменит предыдущий весь объект новым.

RightТеперь ваш filepath1 onSuccessListener выполняется первым.После этого выполняется filepath onSuccessListener, который перезаписывает все, что filepath1 onSuccessListener записывает в базу данных.Вот почему вы получаете этот результат.Вы можете проверить себя, посмотрев свою базу данных при выполнении этой команды.

Попробуйте этот код.Это должно решить вашу проблему.

if( mSelectedUri !=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").child(mSelectedUri.getLastPathSegment());

StorageReference filepath1 = FirebaseStorage.getInstance().getReference()
        .child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
                "/" + postId + "/post_image1").child(mSelectedUri1.getLastPathSegment());
        Uri firebaseUri1;




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

public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


    firebaseUri1 = taskSnapshot.getDownloadUrl();

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






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

            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


                    Uri firebaseUri2 = taskSnapshot.getDownloadUrl();

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

                        Post post = new Post();
                        post.setImage(firebaseUri1.toString());
                      //  post.setImage1(firebaseUri.toString());

                        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.setImage1(firebaseUri2.toString());


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



   // resetFields();



                }


});



    }


});
...