[英]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.