【问题标题】:TransferUtility Does not trigger onProgresschangedTransferUtility 不触发 onProgresschanged
【发布时间】:2016-06-06 19:59:56
【问题描述】:

我正在开发一个项目,我想在开发者身份验证完成后上传文件。我正在使用 AWS Cognito 进行身份验证。这里的问题是有时 TransferUtility 不会触发 onProgresschanged。虽然它不会触发 onprogresschanged 但文件正在上传。我想在每次上传的 UI 上显示一个进度条。它有时会工作,有时会不工作。

这是我上传文件的方式。

    public void upload() {

    ClientConfiguration configuration = new ClientConfiguration();
    configuration.setProtocol(Protocol.HTTP);
    configuration.setSocketTimeout(5 * 10000);
    configuration.setConnectionTimeout(5 * 10000);
    configuration.setMaxErrorRetry(3);

    if(sS3Client==null) {
        sS3Client = new AmazonS3Client(credentials,configuration);
    }
    sTransferUtility = new TransferUtility(sS3Client,
        this.ctx);

   observer = sTransferUtility.upload("bucketer", "Filename", "file");

   observer.setTransferListener(new UploadListener(progress));

   }

   private class UploadListener implements TransferListener {

    ProgressBar progressBar;
    public UploadListener(ProgressBar progress){
        this.progressBar = progress;

    }

    @Override
    public void onStateChanged(int i, TransferState transferState) {

        Log.d("STATUS CHANGED:".concat(String.valueOf(i)),transferState.toString());


        switch (transferState.toString())
        {
            case "IN_PROGRESS":
            {
                Log.d("IN_PROGRESS", "IN_PROGRESS");
            }
            break;
            case "COMPLETED":
            {
                Log.d("COMPLETED COMPLETED", "COMPLETED");


            }
            break;
        }

    }

    @Override
    public void onProgressChanged(int i, long l, long l1) {

        updator();

        this.progressBar.setProgress(transferprogres);



    }

    @Override
    public void onError(int i, Exception e) {

        Log.d("UPOLADING ERROR:",String.valueOf(e));

    }
    }


   public void updator(){
        transferprogres = (int) ((double) observer.getBytesTransferred() * 100 / observer.getBytesTotal());

}

上面的代码是整个项目的一部分。更多详情评论。 为什么会出现奇怪的表现?

【问题讨论】:

    标签: android amazon-web-services amazon-s3 amazon-cognito


    【解决方案1】:

    Aws S3 TransferService Upload failing without errorshttps://github.com/aws/aws-sdk-android/issues/101。简而言之,v2.2.12 要求用户管理传输侦听器的生命周期,因为传输实用程序只保留它们的弱引用。您可以将侦听器或观察者设为类变量,以防止其被垃圾收集。无论如何,我们会在未来的版本中调整监听器。很抱歉给您带来麻烦,请继续关注。

    【讨论】:

    • 我认为我没有完全理解你所说的。但是请你提供一个你所说的示例代码(监听器或观察者作为类变量,以防止它被垃圾收集)。这对我帮助很大。
    • 这在 v2.2.13 版本中得到了改进。请查看其发行说明:aws.amazon.com/releasenotes/Android/4091812718909809
    • 在我添加了 aws sdk 的更新版本之后,直到今天一切都很好。但是突然不知道发生了什么 TransferUtility 没有触发 onProgresschanged。请帮忙
    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多