Why is settransferlistener not triggered in AWS?
I'm trying to upload photos from Android to S3, and the latest operation method I follow on the S3 website is tutorial, but it doesn't seem to trigger transferobserver. 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 one rror(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
In my opinion, no logs are printed in settransferlistener. Why is this? In addition, it should be noted that the image is not uploaded to S3
This is my permission on the list
<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"/>
This is the dependency I 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 that my settings for S3 and cognito are correct because I use the sample code provided in GitHub and have a file to upload. The problem is that the code is not suitable for the Android version I run in Android studio, and I don't want to experience the trouble of degrading the version
This is my configuration in gradle
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "xxxxxxxxx"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
TL; Dr: transferobserver = transferutility.upload does not work properly. And the image has not been uploaded
resolvent:
Just indicate (refer to services) in the list
<service
android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true" />