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

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

2 ответа

Я прочитал 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);
    }
}

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

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

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

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

Другие вопросы по тегам