I am trying to upload photos from android to S3 and I'm following the latest tutorial of how to on the S3 site but it seems like the TransferObserver isn't being triggered. All my variables are declared globally. When I run this code:
credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"us-east-SECRET", // Identity Pool ID
Regions.US_EAST_1 // Region
);
// Instantiate an S3 Client
// Create an S3 client
s3 = new AmazonS3Client(credentialsProvider);
// Set the region of your s3 bucket
s3.setRegion(Region.getRegion(Regions.DEFAULT_REGION));
// Instantiate TransferUtility
transferUtility = new TransferUtility(s3, getApplicationContext());
//Upload a file to amazon s3
Log.i("imageFile", imageFile.toString());
observer = transferUtility.upload(
"foond", /* The bucket to upload to */
"key", /* The key for the uploaded object */
imageFile /* The file where the data to upload exists */
);
Log.i("observer", observer.getAbsoluteFilePath());
Log.i("observer", observer.toString());
Log.i("observer", observer.getState().toString());
Log.i("observer", String.valueOf(observer.getBytesTransferred()));
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
Log.i("id", String.valueOf(id));
Log.i("TransferState", String.valueOf(state));
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
Log.i("id", String.valueOf(id));
Log.i("bytesCurrent", String.valueOf(bytesCurrent));
Log.i("bytesTotal", String.valueOf(bytesTotal));
}
@Override
public void onError(int id, Exception ex) {
Log.e("Error", String.valueOf(ex));
}
});
Log.i("observer", observer.getState().toString());
Log.i("observer", String.valueOf(observer.getBytesTransferred()));
What I get in the console is
I/OpenGLRenderer: Initialized EGL, version 1.4
W/art: Suspending all threads took: 21.244ms
D/CognitoCachingCredentialsProvider: Loading credentials from SharedPreferences
I/imageFile: /storage/emulated/0/DCIM/Camera/IMG_20160223_134442.jpg
V/RenderScript: 0x9ab29000 Launching thread(s), CPUs 4
I/observer: /storage/emulated/0/DCIM/Camera/IMG_20160223_134442.jpg
I/observer: com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver@6e1c6df
W/art: Suspending all threads took: 9.843ms
I/observer: WAITING
I/observer: 0
I/observer: WAITING
I/observer: 0
It seems to me that none of the logs were printed out in setTransferListener. Why would this be the case? Also, it should be noted that the images are not uploaded onto S3.
Here are the permissions I have for the manifest
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Here are my dependencies that I've imported:
compile 'com.amazonaws:aws-android-sdk-core:2.+'
compile 'com.amazonaws:aws-android-sdk-cognito:2.+'
compile 'com.amazonaws:aws-android-sdk-s3:2.+'
compile 'com.amazonaws:aws-android-sdk-ddb:2.+'
I know my setup for S3 and cognito are correct because I've used the sample code that was provided in github and I got a file to upload. The problem was that the code did not fit the android version I was running in android studio and I did not want to go through the trouble of downgrading a version.
Here are my configurations in my gradle
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "xxxxxxxxx"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
TL;DR: TransferObserver observer = transferUtility.upload is not working. And images are not being uploaded.