我遇到了一個我正在編寫的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