【问题标题】:Firebase storage upload progress inaccurateFirebase 存储上传进度不准确
【发布时间】:2016-09-27 02:03:40
【问题描述】:

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

我的问题是,当我尝试上传图像时,T​​askSnapshot 没有返回已传输的字节。它只是保持在 0。这是我为此拥有的一段 sn-p 代码:

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% 完成

【问题讨论】:

    标签: android firebase firebase-storage


    【解决方案1】:

    firebaser 在这里

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

    我们有一项未完成的任务,即在较小的文件和较低的带宽连接的情况下改进进度测量的粒度。

    【讨论】:

    • 好的,弗兰克。谢谢你让我知道。请在此任务完成或到 github 的链接时更新我,我可以在其中观看或贡献。谢谢。
    • 我的文件是 4 mb.. 我正在计算进度百分比 (getBytesTransferred()/totalCount() * 100),但它一次性占用 100%
    • 这听起来像是您的代码的具体问题。我建议您使用minimal complete code that reproduces the problem 提出一个新问题。这样别人就可以准确地看到在做什么,并希望能发现问题。
    • @FrankvanPuffelen 我有 16KB 或最大 50KB 的图像...进度测量的粒度是否有任何更新?
    • 很遗憾没有。对此的任何更改都会显示在您使用的 SDK 的 release notes 中。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2014-04-30
      • 2018-01-19
      • 2021-11-14
      • 2016-11-28
      • 2021-01-18
      • 2018-12-21
      • 2018-09-22
      • 2019-09-14
      相关资源
      最近更新 更多