AWS S3的Android SDK 2.11.0

问题描述 投票:5回答:2

我的代码如下所示:

final AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(s3AccessKeyId, s3SecretAccessKey));
final TransferUtility util = TransferUtility.
                    builder().s3Client(s3Client).context(context).build();

如果从升级 'com.amazonaws:AWS-Android的SDK-S3:2.7.5' 到 'com.amazonaws:AWS-Android的SDK-S3:2.11.0' 我碰到下面的错误在我logcat中,即使上传的内容仍在工作:

E/nsferNetworkLossHandler: TransferNetworkLossHandler is not created. Please call `TransferNetworkLossHandler.getInstance(Context)` to instantiate it before retrieving
E/UploadTask: TransferUtilityException: [com.amazonaws.mobileconnectors.s3.transferutility.TransferUtilityException: TransferNetworkLossHandler is not created. Please call `TransferNetworkLossHandler.getInstance(Context)` to instantiate it before retrieving]

当我改变我的代码,包括TransferNetworkLossHandler:

TransferNetworkLossHandler.getInstance(context);
final AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(s3AccessKeyId, s3SecretAccessKey));
final TransferUtility util = TransferUtility.
                    builder().s3Client(s3Client).context(context).build();

没有用它做任何事情,我得到没有更多的错误。

然而,这是此错误消息并不打算如何。它告诉你使用TransferNetworkLossHandler,但对如何使用它的文档。

我只是想显示错误(如烤面包或一个AlertDialog)的用户,如果上传不工作。所以我不需要处理的。但我也不想被写进我的日志每次错误消息。此外,我不希望使用的只是抓一个实例,并没有做任何事的这个hackish的解决方案。

什么是正确使用此处理我的案子吗?

android amazon-s3 awss3transferutility aws-sdk-android
2个回答
2
投票

我读release_v2.11.0和release_v2.11.1(释放23hs前)更改日志,并且它们表示了下:

  • 亚马逊S3(增强):介绍TransferNetworkLossHandler,侦听网络连接的变化的工具。 TransferNetworkLossHandler暂停正在进行的传输时的网络下线并恢复当网络重新联机认为已暂停的转移。
  • 亚马逊S3(修正错误):固定在TransferUtility一个错误在当网络传输的执行期间变为脱机状态的状态没有被设置为“WAITING_FOR_NETWORK”。

你的情况ü可以包括TransferNetworkLossHandler以避免该错误消息,并使用TransferListener检测状态更改为“WAITING_FOR_NETWORK”,“失败”或“错误”,并通知用户:

TransferObserver transferObserver;
transferObserver = transferUtility.upload(UPLOAD_FOLDER+fileName, fileToUpload);
transferObserver.setTransferListener(new UploadListener());

/**
 * Upload listener to check transfer states and progress
 */
private class UploadListener implements TransferListener {

    @Override
    public void onStateChanged(int id, TransferState state) {
        Log.d(TAG, "onStateChanged: " + id + ", " + state.toString());

        // If upload error, failed or network disconnect
        if(state == TransferState.ERROR || state == TransferState.FAILED || state == TransferState.WAITING_FOR_NETWORK){
            // HERE end service and notice user !!!
        }
    }

    @Override public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
        float percentDonef = ((float) bytesCurrent / (float) bytesTotal) * 100;        int percentDone = (int)percentDonef;
        Log.d(TAG, "ID:" + id + " bytesCurrent: " + bytesCurrent + " bytesTotal: " + bytesTotal + " " + percentDone + "%");
    } 

    @Override public void onError(int id, Exception ex) {
        Log.e(TAG, ex);
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.