7

由 addOnProgressListener 覆盖的 onProgress 函数存在问题。

我的问题是我尝试上传图像时的 TaskSnapshot 没有返回已传输的字节。它只是保持在 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:总字节数: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:总字节数: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 总字节数:205846
05-28 19:21:41.458 27673-27673:上传完成:100%

4

2 回答 2

8

火力基地在这里

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

在较小的文件和较低的带宽连接的情况下,我们有一个开放的任务来提高进度测量的粒度。

于 2016-05-29T14:58:26.517 回答
1

根据firebase存储文档,它们以双精度返回进度值,例如0.13、0.15、0.24、0.55等。由于您要转换为int类型,它总是返回0。所以解决方案不要转换为int,只需将其存储在double

双倍进度=(taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalBytesCount); System.out.println(进度*100 +"");

于 2018-10-04T11:50:39.537 回答