簡體   English   中英

AWS S3 Android SDK 2.11.0

[英]AWS S3 Android SDK 2.11.0

我的代碼看起來像這樣:

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,但沒有關於如何使用它的文檔。

我只想向用戶顯示錯誤(如Toast或AlertDialog),如果上傳不起作用。 所以我根本不需要處理程序。 但我也不希望每次都將錯誤消息寫入我的日志。 此外,我不想使用這個只是抓住一個實例而不用它做任何事情的hackish解決方案。

這個處理程序對我的案例有什么用處?

我閱讀了release_v2.11.0和release_v2.11.1(23小時前發布)CHANGELOGS,他們指出了下一個:

  • Amazon S3(增強功能):推出TransferNetworkLossHandler,一種偵聽網絡連接變化的實用程序。 當網絡脫機時,TransferNetworkLossHandler會暫停正在進行的傳輸,並恢復網絡重新聯機時暫停的傳輸。

  • Amazon S3(錯誤修復):修復了TransferUtility中的一個錯誤,當傳輸執行期間網絡脫機時,狀態未設置為“WAITING_FOR_NETWORK”。

在您的情況下,您可以包含TransferNetworkLossHandler以避免錯誤消息並使用TransferListener檢測狀態更改為“WAITING_FOR_NETWORK”,“FAILED”或“ERROR”並注意用戶:

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM