TransferUtility 不触发 onProgresschanged
TransferUtility Does not trigger onProgresschanged
我正在做一个项目,我想在完成开发者身份验证后上传文件。我正在使用 AWS Cognito 进行身份验证。这里的问题是有时 TransferUtility 不会触发 onProgresschanged。虽然它不会触发 onprogresschanged 但文件正在上传。我想在 UI 上显示一个进度条,因为每个 upload.It 有时工作,有时不工作。
这是我上传文件的方式。
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());
}
以上代码是整个项目的一部分。有关更多详细信息,请发表评论。
为什么会出现奇怪的表现?
参见 and https://github.com/aws/aws-sdk-android/issues/101。简而言之,v2.2.12 要求用户管理传输监听器的生命周期,因为传输实用程序只保留它们的弱引用。您可以将侦听器或观察器设置为 class 变量,以防止它被垃圾收集。不管怎样,我们会在未来的版本中调整监听器。抱歉给您带来困扰,敬请期待
我正在做一个项目,我想在完成开发者身份验证后上传文件。我正在使用 AWS Cognito 进行身份验证。这里的问题是有时 TransferUtility 不会触发 onProgresschanged。虽然它不会触发 onprogresschanged 但文件正在上传。我想在 UI 上显示一个进度条,因为每个 upload.It 有时工作,有时不工作。
这是我上传文件的方式。
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());
}
以上代码是整个项目的一部分。有关更多详细信息,请发表评论。 为什么会出现奇怪的表现?
参见