Nimblechapps Blog

This is the section where we get a chance to rant about latest happenings in the tech world. Keen to know our thoughts? Refer our blogs

How to Integrate Dropbox with your Android APP and Perform CRUD Action

Integrate Dropbox with your Android APP and Perform CRUD Action

Main objective of this blog is to give you more detail information about how to Integrate Dropbox with your Android APP and Perform CRUD Action.

#1

Introduction of The Tools

For Developing an Android application, we use an Android Studio, which allows the applications to be developed in a Java Language Environment.

#2

Setting Up The Environment.

In Android Studio, create a new project by navigating to File ⇒ New Project and fill all the required details. When it prompts to select a default activity, select Blank Activity and proceed.

#3

Integrate Dropbox With Your Android App.

What is DROPBOX?

Dropbox is a cloud storage wherein we can store photos, videos, documents, and files. We can access these files from any computer and from anywhere.

To Integrate the DROPBOX API in your android application, follow the following steps:

In this tutorial, The first screen will be – PickImageActivity To select an image and show on the screen.

After selecting an image, We will code for uploading the Image on Your Dropbox Account. Make sure you have Dropbox app installed on your Android device.

So after selecting an image, the Dropbox login screen will be opened. Once you are logged in, you will be redirected to The Second Screen.

To support the uploading, the Dropbox documentation provides the following java files:

A

DropboxClientFactory To initialize the client

B

PicassoClient Configure picasso to know about special thumbnail requests

C

UploadFileTask Async task to upload a file to a Dropbox

D

UriHelpers Utility functions to support Uri conversion and processing.

The Second Screen will be MainActivity This has the code to upload the image to Dropbox.

1. Create a New Project in Android Studio

Create a New Project in Android Studio

2. Select Your Platform and Proceed.

Select Your Platform and Proceed

3. Select an Activity and Name it

[huge_it_slider id=”5 “]

4. To Use the Dropbox API

First of all, in your project, add the following permissions in your AndroidManifest file.

[pastacode lang=”java” manual=”%3Cuses-permission%20android%3Aname%3D%22android.permission.INTERNET%22%2F%3E%0A%3Cuses-permission%20android%3Aname%3D%22android.permission.WRITE_EXTERNAL_STORAGE%22%20%2F%3E%0A%3Cuses-permission%20android%3Aname%3D%22android.permission.READ_EXTERNAL_STORAGE%22%20%2F%3E” message=”” highlight=”” provider=”manual”/]

5. Now in a build.gradle file add the Following:

[pastacode lang=”java” manual=”dependencies%20%7B%0A%20%20%20%20compile%20’com.dropbox.core%3Adropbox-core-sdk%3A0-SNAPSHOT’%0A%20%20%20%20compile%20fileTree(include%3A%20%5B’*.jar’%5D%2C%20dir%3A%20’libs’)%0A%20%20%20%20testCompile%20’junit%3Ajunit%3A4.12’%0A%20%20%20%20compile%20’com.android.support%3Aappcompat-v7%3A23.1.1’%0A%20%20%20%20compile%20’com.dropbox.core%3Adropbox-core-sdk%3A2.1.1’%0A%20%20%20%20compile%20’com.squareup.picasso%3Apicasso%3A2.5.2’%0A%20%20%20%20compile%20’com.squareup.okhttp%3Aokhttp%3A2.7.5’%0A%20%20%20%20compile%20’com.squareup.okhttp3%3Aokhttp%3A3.5.0’%0A%20%20%20%20compile%20files(‘libs%2Fjson_simple-1.1.jar’)%0A%20%20%20%20compile%20’com.squareup.okhttp%3Aokhttp%3A2.0.0’%0A%7D” message=”” highlight=”” provider=”manual”/]

6. Add the Line to Avoid Conflict

In the same build.gradle file adds the lines to avoid a conflict during build time of multiple License.txt or Notice.txt files because sometimes android studio considers duplicate entry lib’s and gives error while packaging.

[pastacode lang=”java” manual=”packagingOptions%20%7B%0A%20%20%20%20exclude%20’META-INF%2FLICENSE’%0A%20%20%20%20exclude%20’META-INF%2FLICENSE.txt’%0A%20%20%20%20exclude%20’META-INF%2FNOTICE’%0A%20%20%20%20exclude%20’META-INF%2FNOTICE.txt’%0A%7D” message=”” highlight=”” provider=”manual”/]

7. Now Open App Console

Go to the https://www.dropbox.com/developers/apps And create the new app
Open App Console

8. Click on “CREATE APP”

Click on “CREATE APP”

9. Now Click on “DROPBOX API”

[huge_it_slider id=”6 “]

 

 

10. Open Your Project in Android Studio and in Your Manifest file, Add

[pastacode lang=”java” manual=”%3Cactivity%0A%20%20%20%20android%3Aname%3D%22com.dropbox.client2.android.AuthActivity%22%0A%20%20%20%20android%3AconfigChanges%3D%22orientation%7Ckeyboard%22%0A%20%20%20%20android%3AlaunchMode%3D%22singleTask%22%20%3E%0A%20%20%20%20%3Cintent-filter%3E%0A%20%0A%20%20%20%20%20%20%20%20%3Cdata%20android%3Ascheme%3D%22db-********%22%20%2F%3E%0A%0A%20%20%20%20%20%20%20%20%3Caction%20android%3Aname%3D%22android.intent.action.VIEW%22%20%2F%3E%0A%0A%20%20%20%20%20%20%20%20%3Ccategory%20android%3Aname%3D%22android.intent.category.BROWSABLE%22%2F%3E%0A%20%20%20%20%20%20%20%20%3Ccategory%20android%3Aname%3D%22android.intent.category.DEFAULT%22%20%2F%3E%0A%20%20%20%20%3C%2Fintent-filter%3E%0A%3C%2Factivity%3E” message=”” highlight=”” provider=”manual”/]

Add an activity in manifest file which will be used to authenticate your application. Change the android:scheme to db – followed by your app key.

11. Now The First Screen of App is PickImageActivity.

Open your activity_pick_image and add the components: Two Buttons to select and upload and an ImageView to view the selected image.
PickImageActivity

12. Add the OnClickListner for Selecting Image.

Here we check the version of Android on the device so accordingly the code works.

[pastacode lang=”java” manual=”btnPickImage.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%20%20%20%20%40Override%0A%20%20%20%20public%20void%20onClick(View%20v)%20%7B%0A%20%20%20%20%20%20%20%20if%20(isKitKat)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Intent%20intent%20%3D%20new%20Intent(Intent.ACTION_OPEN_DOCUMENT)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20intent.addCategory(Intent.CATEGORY_OPENABLE)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20intent.setType(%22image%2F*%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20startActivityForResult(Intent.createChooser(intent%2C%20%22SELECT%22)%2C%201)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Intent%20intent%20%3D%20new%20Intent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20intent.setType(%22image%2F*%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20intent.setAction(Intent.ACTION_GET_CONTENT)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20startActivityForResult(Intent.createChooser(intent%2C%22SELECT%22)%2C%201)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D)%3B” message=”” highlight=”” provider=”manual”/]

13. Now we add onActivityResult.

By using this method we get the path of the image. Store the path of the image in the variable strImagePath.

14. Now We set the Image on ImageView.

[pastacode lang=”java” manual=”File%20f%20%3D%20new%20File(strImagePath)%3B%0A%0A%20%20%20%20BitmapFactory.Options%20bmOptions%20%3D%20new%20BitmapFactory.Options()%3B%0A%20%20%20%20Bitmap%20bitmap%20%3D%20%20BitmapFactory.decodeFile(f.getAbsolutePath()%2CbmOptions)%3B%0A%20%20%20%20iv.setImageBitmap(bitmap)%3B” message=”” highlight=”” provider=”manual”/]

15. Now Extract The Name of The Image From The Path and Store It in a String.

[pastacode lang=”java” manual=”String%20result1%20%3D%20strImagePath.substring(strImagePath.lastIndexOf(%22%2F%22)%20%2B%201)%3B” message=”” highlight=”” provider=”manual”/]

I have kept the button upload hidden till the path is obtained. So once you get the result1, use this to show the button upload

[pastacode lang=”java” manual=”btn_upload.setVisibility(View.VISIBLE)%3B” message=”” highlight=”” provider=”manual”/]

16. We Need to Use Runtime Permissions.

Add check self-permission.

[pastacode lang=”java” manual=”pickImageButton.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%40Override%0A%20%20%20%20%20%20%20%20%20%20%20%20public%20void%20onClick(View%20v)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(Build.VERSION.SDK_INT%20%3E%3D%20Build.VERSION_CODES.M%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26%26%20checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20!%3D%20PackageManager.PERMISSION_GRANTED)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20requestPermissions(new%20String%5B%5D%7BManifest.permission.READ_EXTERNAL_STORAGE%7D%2C%20PERMISSION_REQUEST_CODE)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectImage()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D)%3B” message=”” highlight=”” provider=”manual”/]

So we are done with image loading in our First Screen

Now We Check Step by Step How to Upload it to The Dropbox

Step 1: Use Dropbox Initialization. (Refer MainActivity.Java)

Step 2: Code For Asynchornous Task for Image Upload (Refer UploadFileTask.Java)

Step 3: On Click Of The Button, we upload the image on the DROPBOX (Refer activity_main.xml and uploadFile(uri_get); method in MainActivity.Java)

Step 4: Initialize the Session of the Key pair to authenticate with Dropbox.

[pastacode lang=”java” manual=”private%20DropboxAPI%3CAndroidAuthSession%3E%20mDBApi%3B%0Aprotected%20void%20initialize_session()%7B%0A%20%20%20%20%20%20%2F%2F%20store%20app%20key%20and%20secret%20key%0A%20%20%20%20AppKeyPair%20appKeys%20%3D%20new%20AppKeyPair(APP_KEY%2C%20APP_SECRET)%3B%0A%20%20%20%20AndroidAuthSession%20session%20%3D%20new%20AndroidAuthSession(appKeys)%3B%0A%20%20%20%20%2F%2FPass%20app%20key%20pair%20to%20the%20new%20DropboxAPI%20object.%0A%0A%20%20%20%20mDBApi%20%3D%20new%20DropboxAPI%3C%3E(session)%3B%0A%20%20%20%20%2F%2F%20MyActivity%20below%20should%20be%20your%20activity%20class%20name%0A%20%20%20%20%2F%2Fstart%20session%0A%20%20%20%20mDBApi.getSession().startOAuth2Authentication(MainActivity.this)%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]

Step 5: For Asynchronous Task For Image Upload

[pastacode lang=”java” manual=”class%20UploadFileTask%20extends%20AsyncTask%3CString%2C%20Void%2C%20FileMetadata%3E%20″ message=”” highlight=”” provider=”manual”/]

And in this class, we code for file upload.

[pastacode lang=”java” manual=”%40Override%0Aprotected%20FileMetadata%20doInBackground(String…%20params)%20%7B%0A%20%20%20%20String%20localUri%20%3D%20params%5B0%5D%3B%0A%20%20%20%20File%20localFile%20%3D%20UriHelpers.getFileForUri(mContext%2C%20Uri.parse(localUri))%3B%0A%0A%20%20%20%20Log.e(%22localFile%22%2C%22%22%2BlocalFile)%3B%0A%0A%20%20%20%20if%20(localFile%20!%3D%20null)%20%7B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Note%20-%20this%20is%20not%20ensuring%20the%20name%20is%20a%20valid%20dropbox%20file%20name%0A%20%20%20%20%20%20%20%20String%20remoteFileName%20%3D%20localFile.getName()%3B%0A%0A%20%20%20%20%20%20%20%20try%20%20%7B%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20InputStream%20inputStream%20%3D%20new%20FileInputStream(localFile)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20mDbxClient.files().uploadBuilder(%20%20%22%2F%22%20%2B%20remoteFileName)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.withMode(WriteMode.OVERWRITE)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.uploadAndFinish(inputStream)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(DbxException%20%7C%20IOException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20mException%20%3D%20e%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20null%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

Now our code for uploading is ready.

Step 6: activity_mail.xml

In our activity_main.xml, we have a button to upload the image to Dropbox.
We have stored the path and URI of the image in shared preference.

[pastacode lang=”java” manual=”SharedPreferences%20sp%20%3D%20this.getSharedPreferences(%22IMAGEPATH%22%2C%20MODE_WORLD_READABLE)%3B%0AstrImagePath%20%3D%20sp.getString(%22strImagePath%22%2C%20%22%22)%3B%0Aresult1%3D%20sp.getString(%22result1%22%2C%20%22%22)%3B%0A%0ASharedPreferences%20spuri%20%3D%20this.getSharedPreferences(%22uri_getSP%22%2C%20MODE_WORLD_READABLE)%3B%0Auri_get%20%3D%20spuri.getString(%22uri_get%22%2C%20%22%22)%3B” message=”” highlight=”” provider=”manual”/]

So use this button and inside the onClickListner of the button, call the async task that is the file UploadFileTask.

[pastacode lang=”java” manual=”btn_upload.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%20%20%20%20%40Override%0A%20%20%20%20public%20void%20onClick(View%20view)%20%7B%0A%20%20%20%20%20%20%20%20uploadFiles()%3B%0A%20%20%20%20%7D%0A%7D)%3B%0A%0A%2F**%0A%20%20%20%20%20*%20Callback%20register%20method%20to%20execute%20the%20upload%20method%0A%20%20%20%20%20*%2F%0A%20%20%20%20public%20void%20uploadFiles()%7B%0A%0A%0A%0A%20%20%20%20%20%20%20%20SharedPreferences%20sp%20%3D%20this.getSharedPreferences(%22IMAGEPATH%22%2C%20MODE_WORLD_READABLE)%3B%0A%20%20%20%20%20%20%20%20strImagePath%20%3D%20sp.getString(%22strImagePath%22%2C%20%22%22)%3B%0A%20%20%20%20%20%20%20%20result1%3D%20sp.getString(%22result1%22%2C%20%22%22)%3B%0A%0A%0A%20%20%20%20%20%20%20%20SharedPreferences%20spuri%20%3D%20this.getSharedPreferences(%22uri_getSP%22%2C%20MODE_WORLD_READABLE)%3B%0A%20%20%20%20%20%20%20%20uri_get%20%3D%20spuri.getString(%22uri_get%22%2C%20%22%22)%3B%0A%20%0A%20%20%20%20%20%20%20uploadFile(uri_get)%3B%0A%20%20%20%20%7D%0A%0A%0A%0A%0A%0Aprivate%20void%20uploadFile(String%20fileUri)%20%7B%0A%20%20%20%20final%20ProgressDialog%20dialog%20%3D%20new%20ProgressDialog(this)%3B%0A%20%20%20%20dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER)%3B%0A%20%20%20%20dialog.setCancelable(false)%3B%0A%20%20%20%20dialog.setMessage(%22Uploading%22)%3B%0A%20%20%20%20dialog.show()%3B%0A%0A%20%20%20%20new%20UploadFileTask(this%2C%20DropboxClientFactory.getClient()%2C%20new%20UploadFileTask.Callback()%20%7B%0A%20%20%20%20%20%20%20%20%40Override%0A%20%20%20%20%20%20%20%20public%20void%20onUploadComplete(FileMetadata%20result)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20dialog.dismiss()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20String%20message%20%3D%20result.getName()%20%2B%20%22%20size%20%22%20%2B%20result.getSize()%20%2B%20%22%20modified%20%22%20%2B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DateFormat.getDateTimeInstance().format(result.getClientModified())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Toast.makeText(MainActivity.this%2C%20message%2C%20Toast.LENGTH_SHORT)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.show()%3B%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20Toast.makeText(MainActivity.this%2C%20%22Successfully%20Uploaded.%22%2C%20Toast.LENGTH_SHORT)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.show()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20Intent%20it%3Dnew%20Intent(MainActivity.this%2CPickImageActivity.class)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20startActivity(it)%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%40Override%0A%20%20%20%20%20%20%20%20public%20void%20onError(Exception%20e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20dialog.dismiss()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20Log.e(%22ERROR%20%22%2C%20%22Failed%20to%20upload%20file.%22%2C%20e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Toast.makeText(MainActivity.this%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22An%20error%20has%20occurred%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Toast.LENGTH_SHORT)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.show()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D).execute(fileUri%2CstrImagePath)%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

After this code, Open your DROPBOX APPLICATION installed on your device, and reload it.

You can see the uploaded file there.

This is how we use DROPBOX API V2. If you are using API V1, The Shift to V2 as V1  is deprecated and doesn’t work.