TransferUtility не запускается по прогрессу
Я работаю над проектом, в который я хочу загрузить файлы после завершения аутентификации разработчика. Я использую AWS Cognito для аутентификации. Проблема здесь иногда заключается в том, что TransferUtility не запускает OnProgress. Хотя он не вызывает onprogressloaded, но файл загружается. Я хочу показывать индикатор прогресса в пользовательском интерфейсе для каждой загрузки. Иногда это работает, а иногда и не работает.
Вот как я загружаю файлы.
public void upload() {
ClientConfiguration configuration = new ClientConfiguration();
configuration.setProtocol(Protocol.HTTP);
configuration.setSocketTimeout(5 * 10000);
configuration.setConnectionTimeout(5 * 10000);
configuration.setMaxErrorRetry(3);
if(sS3Client==null) {
sS3Client = new AmazonS3Client(credentials,configuration);
}
sTransferUtility = new TransferUtility(sS3Client,
this.ctx);
observer = sTransferUtility.upload("bucketer", "Filename", "file");
observer.setTransferListener(new UploadListener(progress));
}
private class UploadListener implements TransferListener {
ProgressBar progressBar;
public UploadListener(ProgressBar progress){
this.progressBar = progress;
}
@Override
public void onStateChanged(int i, TransferState transferState) {
Log.d("STATUS CHANGED:".concat(String.valueOf(i)),transferState.toString());
switch (transferState.toString())
{
case "IN_PROGRESS":
{
Log.d("IN_PROGRESS", "IN_PROGRESS");
}
break;
case "COMPLETED":
{
Log.d("COMPLETED COMPLETED", "COMPLETED");
}
break;
}
}
@Override
public void onProgressChanged(int i, long l, long l1) {
updator();
this.progressBar.setProgress(transferprogres);
}
@Override
public void onError(int i, Exception e) {
Log.d("UPOLADING ERROR:",String.valueOf(e));
}
}
public void updator(){
transferprogres = (int) ((double) observer.getBytesTransferred() * 100 / observer.getBytesTotal());
}
Код выше является частью общего проекта. Для более подробной информации комментируйте. Почему это показывает странную производительность?
1 ответ
См. Раздел " Загрузка AWS S3 TransferService без ошибок" и https://github.com/aws/aws-sdk-android/issues/101. Короче говоря, v2.2.12 требует, чтобы пользователь управлял жизненным циклом слушателей передачи, поскольку утилита передачи хранит только слабые ссылки на них. Вы можете сделать слушателя или наблюдателя переменной класса, чтобы предотвратить их сборку мусора. Во всяком случае, мы настраиваем слушателей в будущих выпусках. Извините за беспокойство и, пожалуйста, следите за обновлениями.