AWS S3 Android SDK 2.11.0 - PullRequest
       50

AWS S3 Android SDK 2.11.0

0 голосов
/ 01 февраля 2019

Мой код выглядит следующим образом:

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) для пользователя, если загрузка не работала,Так что мне вообще не нужен обработчик.Но я также не хочу, чтобы сообщение об ошибке записывалось в мой журнал каждый раз.Также я не хочу использовать это хакерское решение - просто захватить экземпляр и ничего не делать с ним.

Как правильно использовать этот обработчик для моего случая?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я прочитал CHANGELOGS release_v2.11.0 и release_v2.11.1 (выпущенные 23 часа назад), и они указывают следующее:

  • 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);
    }
}
0 голосов
/ 01 февраля 2019

Вы можете посмотреть по этим ссылкам здесь:

Java https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html

.NET https://docs.aws.amazon.com/AmazonS3/latest/dev/HLuploadFileDotNet.html

Надеюсь, это поможет

...