活动销毁后,应用会继续上传到Firebase存储

时间:2019-07-13 20:39:02

标签: android firebase firebase-storage

单击按钮后,我需要将图像列表上传到Firebase存储,然后销毁该活动,而无需用户采取任何其他操作。

我下面的代码在单击按钮后立即破坏了活动,并让上传进度仍在后台进行。

我想要的是在等待上载进度首先完成之后破坏活动。

我该怎么做才能解决此问题?

// on button click
public void send(View view) {

        imageCount = 0;
        imageKey = databaseReference.push().getKey();

        uploadFile( bitmaps );

        intent.putExtra( "location", location);
        intent.putExtra( "description", description);
        intent.putExtra("date", date);
        setResult( 1, intent );

        finish();
    }


private void uploadFile(final ArrayList<Bitmap> bitmaps) {

        FirebaseStorage storage = FirebaseStorage.getInstance();

        for (final Bitmap bitmap : bitmaps) {

            final StorageReference imageRef = storage
                    .getReferenceFromUrl( "gs://example.appspot.com/" )
                    .child( folderName + "/" + UUID.randomUUID() + ".jpeg" );

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress( Bitmap.CompressFormat.JPEG, 20, baos );
            byte[] data = baos.toByteArray();

            UploadTask uploadTask = imageRef.putBytes( data );

            uploadTask.addOnFailureListener( new OnFailureListener() {

                @Override
                public void onFailure(@NonNull Exception exception) {

                    Toast.makeText( LaporActivity.this, "Fail", Toast.LENGTH_SHORT ).show();

                }
            } ).addOnSuccessListener( new OnSuccessListener<UploadTask.TaskSnapshot>() {

                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    imageRef.getDownloadUrl().addOnSuccessListener( new OnSuccessListener<Uri>() {

                        @Override
                        public void onSuccess(Uri uri) {

                            databaseReference.child( "images" ).child( imageKey ).child( Integer.toString( imageCount ) ).setValue( uri.toString() );

                            imageCount++;

                        }
                    } );
                }
            } );
        }
    }

1 个答案:

答案 0 :(得分:0)

上传完成后,只需在回调中调用finish()。