我遇到了一个我正在编写的Android应用程序的问题。我们在我们的Amazon S3存储桶中存储了一些照片,当我尝试从应用中访问它们时,我的TransferListener中的回调永远不会被调用。Amazon S3 TransferListener永远不会被调用
// S3Networker.java singleton
static final String AWS_COGNITO_POOL_ID = "OUR ID IS HERE";
static final String AWS_BUCKET_NAME = "OUR BUCKET NAME";
TransferUtility transferUtility = null;
private S3Networker instance;
private S3Networker() {
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
Application.getContext(),
AWS_COGNITO_POOL_ID,
Regions.US_WEST_2
);
AmazonS3Client s3Client = new AmazonS3Client(credentialsProvider);
transferUtility = new TransferUtility(s3Client,Application.getContext());
}
public getInstance() {
if(instance == null) {
instance = new S3Networker();
}
return instance;
}
// ...
// Some class methods that don't touch S3
// ...
// S3 Download Method
public void S3PhotoFetch() {
final String objectKey = "path/to/item.jpg";
final File fileDownload = new File(Application.getContext().getCacheDir(), objectKey);
TransferObserver transferObserver = transferUtility.download(
AWS_PHOTO_BUCKET_NAME,
objectKey,
fileDownload);
transferObserver.setTransferListener(new TransferListener(){
@Override
public void onStateChanged(int id, TransferState state) {
Log.d(TAG, "onStateChanged: " + state);
if (TransferState.COMPLETED.equals(state)) {
Log.d(TAG, "Download finished");
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { }
@Override
public void onError(int id, Exception ex) {
Log.e(TAG, "onError: ", ex);
}
});
}
该文件运行良好,没有任何崩溃。但是,应用程序从不会调用TransferListener中的onStateChanged或onError函数,而且我以后也不会从S3接收数据。有人可以解释为什么,以及如何解决它?
谢谢!
你试图使用S3 TransferUtility样品上https://github.com/awslabs/aws-sdk -android-samples? 此示例执行您要完成的任务 –
我已经使用了一些示例应用程序,其中包括上述应用程序。我遇到的问题是OnCrogressChanged()和onError()的回调函数在这个特定的应用程序中没有被调用,尽管它们在其他应用程序中。 – ellman121
您可以发布您的AndroidManifest.xml并检查您是否声明<服务 android:name =“com.amazonaws.mobileconnectors.s3.transferutility。TransferService” 机器人:启用=‘真’/>它标签或不 –
Ravi