Why isn't setTransferListener being triggered in AWS?

Viewed 731

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.

1 Answers
Related