Firebase存储上传进度不准确

时间:2016-05-29 01:42:04

标签: android firebase firebase-storage

addOnProgressListener覆盖了onProgress函数的问题。

我的问题是,当我尝试上传图像时,T​​askSnapshot不会返回已传输的字节。它只是保持在0.这是我的代码片段:

StorageReference myStorageRef = momentsStorageRef.child(momentID + ".jpeg");

UploadTask uploadTask = myStorageRef.putBytes(data, new StorageMetadata.Builder()
       .setContentType("image/jpeg")
       .build());



uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
   @Override
   public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
       int bytesTransferred = (int) taskSnapshot.getBytesTransferred();
       int totalBytes = (int) taskSnapshot.getTotalByteCount();



       int progress = (100 *  bytesTransferred) / totalBytes ;
       Log.v(TAG, "Bytes transferred: " + taskSnapshot.getBytesTransferred());
       Log.v(TAG, "TotalBytes: " + totalBytes);
       Log.v(TAG, "Upload is: " + progress + "% done");
       mBuilder.setProgress(100, progress, false);


       mNotifyManager.notify(APPLICATION_NOTIFICATION_ID, mBuilder.build());
   }
})

这是logCat:

  

05-28 19:21:33.911 27673-27673:转移的字节数:0
05-28   19:21:33.911 27673-27673:TotalBytes:205846
05-28 19:21:33.911   27673-27673:上传是:0%完成
05-28 19:21:35.637 27673-27673:字节   转让:0
05-28 19:21:35.637 27673-27673:TotalBytes:205846
  05-28 19:21:35.637 27673-27673:上传是:0%完成
05-28 19:21:41.458   27673-27673字节转移:205846
05-28 19:21:41.458 27673-27673   TotalBytes:205846
05-28 19:21:41.458 27673-27673:上传时间:100%   完成

2 个答案:

答案 0 :(得分:7)

firebaser here

进度以256KB的块为单位进行测量。由于你的文件小于那个,它适合一个块,因此进度一次从0%跳到100%。

我们有一项开放式任务,可以在较小文件和较低带宽连接的情况下改善进度测量的粒度。

答案 1 :(得分:1)

根据firebase存储文档,它们以诸如0.13、0.15、0.24、0.55等的两倍形式返回进度值。由于您要强制转换为int类型,因此它始终返回0。因此,解决方案不会强制转换为int,而只是将其存储在双

double progress =(taskSnapshot.getBytesTransferred())/ taskSnapshot.getTotalBytesCount); System.out.println(progress * 100 +“”);