Обновите данные базы данных Firebase с помощью URL-адреса хранилища Firebase - PullRequest
0 голосов
/ 14 сентября 2018

Это мой сценарий.У меня есть класс POJO, назовем его Car, объявленный так:

public class Plan{
private String id;
private String userId;
private List< String > pictures;
}

В этом классе картинки List должны иметь ссылки на хранилище Firebase, куда я на самом деле загружаюкартинки.У меня проблемы с этим из-за асинхронного корня функций Firebase.В первый момент этот список изображений имеет ЛОКАЛЬНЫЙ ПУТЬ к изображениям, потому что я не хочу, чтобы пользователь загружал НИЧЕГО, пока он не выполнит все шаги, необходимые для добавления записи в базу данных Firebase.Итак, я просто сохраняю локальный путь к изображениям.Но, как только данные будут сохранены в облаке, мне, конечно, нужно будет загрузить эти изображения в Firebase Storage и обновить соответствующие поля в базе данных Firebase.

Я застрял, пытаясь сделать что-то подобное:

    public void saveToDB(){

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = database.getReference().child( "cars" );
    databaseReference.push().setValue( this, new DatabaseReference.CompletionListener(){
        @Override
        public void onComplete( @Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference ){
            if( databaseError != null ){
                for( String imagePath : pictures ){
                    final DatabaseReference picReference = FirebaseDatabase.getInstance().getReference()
                            .child( "cars" )
                            .child( databaseReference.getKey() )
                            .child( "pictures" );

                    storageReference.putFile( Uri.fromFile( new File( imagePath ) ) )
                            .addOnSuccessListener( new OnSuccessListener< UploadTask.TaskSnapshot >(){
                                @Override
                                public void onSuccess( UploadTask.TaskSnapshot taskSnapshot ){
                                            picReference.child( "0" )
                                            .setValue( taskSnapshot.getMetadata().getPath() );
                                }
                            } );
                }
            }
        }
    } );
}

Как мне сделать так, чтобы все картинки загружались и все поля обновлялись в базе данных Firebase?

1 Ответ

0 голосов
/ 14 сентября 2018

Скорее всего, вы в конечном итоге соберете все объекты Task, возвращенные putFile (), в List, а затем передадите его в Tasks.whenAll () , чтобы получить другую задачу, которая указывает, когда все загрузки завершены.,Вы можете получить URL-адреса от всех этих успешных задач, чтобы заполнить базу данных.Все это будет не так уж просто, и вы должны быть знакомы с задачей Play services api , чтобы сделать это хорошо.

...