【问题标题】:Update Firebase Database data with Firebase Storage url使用 Firebase 存储 URL 更新 Firebase 数据库数据
【发布时间】:2019-02-18 18:02:53
【问题描述】:

这是我的场景。我有一个 POJO 类,我们称之为 Car,声明如下:

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

在该类中,List 图片应该具有指向我实际上传图片的 Firebase 存储的链接。由于 Firebase 函数的异步根,我在执行此操作时遇到问题。 首先,该图片列表具有图像的本地路径,因为我不希望用户在完成将记录添加到 Firebase 数据库所需的所有步骤之前上传任何内容。所以,我只是保存图像的本地路径。但是,一旦将数据保存到云端,我当然需要将这些图像实际上传到 Firebase 存储并更新 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 数据库中的所有字段?

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-storage


    【解决方案1】:

    您最终可能会将 putFile() 返回的所有 Task 对象收集到一个 List 中,然后将其传递给 Tasks.whenAll() 以获取另一个指示何时完成所有上传的 Task。您可以从所有这些成功的任务中获取 URL 以填充数据库。安排这一切的代码量并不小,您一定要熟悉 Play services task api 才能做好。

    【讨论】:

      猜你喜欢
      • 2017-10-20
      • 2019-04-05
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2020-02-09
      • 2019-01-06
      相关资源
      最近更新 更多