1) Add this two jar files in lib folder in your project.Getting both files from
https://www.dropbox.com/developers-v1/core/sdks/android
1) dropbox-android-sdk-1.6.3.jar
2) json_simple-1.1.jar
2) Update build.gradle
compile files('libs/dropbox-android-sdk-1.6.3.jar')
compile files('libs/json_simple-1.1.jar')
3) AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<activity
android:name="com.dropbox.client2.android.AuthActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboard">
<intent-filter>
<!-- Change this to be db- followed by your app key -->
<data android:scheme="db-YOUR_APPLICATION_KEY" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".DropboxActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar" >
</activity>
4) dropbox_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:src="@drawable/tab_dropbox" />
<Button
android:id="@+id/backup_button"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="10dp"
android:background="@android:color/holo_blue_dark"
android:textSize="20sp"
android:text="@string/backup"
android:textColor="@android:color/white" />
<Button
android:id="@+id/restore_button"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="10dp"
android:textSize="20sp"
android:background="@android:color/holo_blue_dark"
android:text="@string/restore"
android:textColor="@android:color/white" />
</LinearLayout>
5) string.xml
<string name="backup">Backup</string>
<string name="restore">Restore</string>
<string name="file_upload_success_message">Backup Uploaded Successfully</string>
<string name="file_upload_failed_message">Backup Failed to Upload</string>
<string name="file_restore_success_message">Backup Restored Successfully</string>
<string name="file_restore_failed_message">Backup Failed to Restore</string>
6) DropBoxActivity.java file.
In this java file i upload and restore sqlite database file on dropbox.
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.dropbox.client2.DropboxAPI;
import com.dropbox.client2.android.AndroidAuthSession;
import com.dropbox.client2.exception.DropboxException;
import com.dropbox.client2.session.AccessTokenPair;
import com.dropbox.client2.session.AppKeyPair;
import com.dropbox.client2.session.Session;
import com.dropbox.client2.session.TokenPair;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* Created by Bhavesh Jain on 4/10/16.
*/
public class DropBoxActivity extends Activity implements View.OnClickListener {
private DropboxAPI<AndroidAuthSession> mDropBoxAPI;
private final String FILE_DIR = "/DIRECTROY NAME/";
private final String DROPBOX_PREFERENCE_NAME = "dropbox_prefs";
private final String ACCESS_KEY = "YOUR_APPLICATION_KEY";
private final String ACCESS_SECRET = "YOUR_APPLICATION_SECRET";
private final String DATABASE_NAME = "backupdata.Sqlite";
private boolean mIsLoggedIn = false, mIsUpload = false, mIdDownload = false;
private ProgressDialog mDialog = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dropbox_activity);
Button uploadBtn = (Button) findViewById(R.id.backup_button);
uploadBtn.setOnClickListener(this);
Button restoreBtn = (Button) findViewById(R.id.restore_button);
restoreBtn.setOnClickListener(this);
AndroidAuthSession session = buildSession();
mDropBoxAPI = new DropboxAPI<AndroidAuthSession>(session);
}
private AndroidAuthSession buildSession() {
AppKeyPair pair = new AppKeyPair(ACCESS_KEY, ACCESS_SECRET);
AndroidAuthSession session;
SharedPreferences prefs = getSharedPreferences(DROPBOX_PREFERENCE_NAME, 0);
String key = prefs.getString(ACCESS_KEY, null);
String secret = prefs.getString(ACCESS_SECRET, null);
if (key != null && secret != null) {
AccessTokenPair token = new AccessTokenPair(key, secret);
session = new AndroidAuthSession(pair, Session.AccessType.APP_FOLDER, token);
} else {
session = new AndroidAuthSession(pair, Session.AccessType.APP_FOLDER);
}
return session;
}
@Override
protected void onResume() {
super.onResume();
AndroidAuthSession session = mDropBoxAPI.getSession();
if (session.authenticationSuccessful()) {
try {
session.finishAuthentication();
TokenPair tokens = session.getAccessTokenPair();
SharedPreferences prefs = getSharedPreferences(DROPBOX_PREFERENCE_NAME, 0);
Editor editor = prefs.edit();
editor.putString(ACCESS_KEY, tokens.key);
editor.putString(ACCESS_SECRET, tokens.secret);
editor.commit();
mIsLoggedIn = true;
if(mIsUpload) {
mIsUpload = false;
UploadFileToDropbox upload = new UploadFileToDropbox();
upload.execute();
} else if(mIdDownload) {
mIdDownload = false;
DownloadFileToDropbox download = new DownloadFileToDropbox();
download.execute();
}
} catch (IllegalStateException e) {
Toast.makeText(this, "Error during Dropbox authentication",
Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.backup_button:
mIsUpload = true;
// First check user is logged in or not
if(mIsLoggedIn) {
mIsUpload = false;
UploadFileToDropbox upload = new UploadFileToDropbox();
upload.execute();
} else {
mDropBoxAPI.getSession().startAuthentication(DropBoxActivity.this);
}
break;
case R.id.restore_button:
mIdDownload = true;
// First check user is logged in or not
if(mIsLoggedIn) {
mIdDownload = false;
DownloadFileToDropbox download = new DownloadFileToDropbox();
download.execute();
} else {
mDropBoxAPI.getSession().startAuthentication(DropBoxActivity.this);
}
break;
default:
break;
}
}
public class UploadFileToDropbox extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
if (mDialog == null) {
mDialog = new ProgressDialog(DropBoxActivity.this);
mDialog.setMessage("Uploading File, Please wait...");
mDialog.show();
}
}
@Override
protected Boolean doInBackground(Void... params) {
String dbFilePath = getDefaultAppPath(getApplicationContext()) + "/" + DATABASE_NAME;
File fileContent = new File(dbFilePath);
try {
FileInputStream fis = new FileInputStream(fileContent);
if (fis != null) {
DropboxAPI.Entry newEntry = mDropBoxAPI.putFileOverwrite(FILE_DIR + "/" + DATABASE_NAME, fis, fileContent.length(), null);
if (newEntry != null) {
v("File Name : " + newEntry.fileName());
}
}
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
v("FileNotFoundException in DropBox Upload : " + e.getMessage());
} catch (DropboxException e) {
e.printStackTrace();
v("DropboxException in DropBox Upload : " + e.getMessage());
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
mDialog = null;
}
if (result) {
showAlertDialog(getString(R.string.file_upload_success_message));
} else {
showAlertDialog(getString(R.string.file_upload_failed_message));
}
}
}
private String getDefaultAppPath(Context context) {
File file = context.getFilesDir();
return file.getAbsolutePath() + "/";
}
private void showAlertDialog(String message) {
final Dialog dialog = new Dialog(DropBoxActivity.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_alert_dialog);
dialog.setCanceledOnTouchOutside(false);
TextView errorTV = (TextView) dialog
.findViewById(R.id.alert_message_textview);
Button okBtn = (Button) dialog.findViewById(R.id.ok_button);
errorTV.setText(message);
okBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
}
public class DownloadFileToDropbox extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
if (mDialog == null) {
mDialog = new ProgressDialog(DropBoxActivity.this);
mDialog.setMessage("Uploading File, Please wait...");
mDialog.show();
}
}
@Override
protected Boolean doInBackground(Void... params) {
String dbFilePath = getDefaultAppPath(getApplicationContext()) + "/" + DATABASE_NAME;
File file = new File(dbFilePath);
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DropboxAPI.DropboxFileInfo info = null;
try {
info = mDropBoxAPI.getFile(FILE_DIR + "/" + DATABASE_NAME, null, outputStream, null);
v("The DB File is: " + info.getMetadata().rev);
return true;
} catch (DropboxException e) {
// TODO Auto-generated catch block
v("DropboxException : " + e.getMessage());
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
mDialog = null;
}
if (result) {
showAlertDialog(getString(R.string.file_restore_success_message));
} else {
showAlertDialog(getString(R.string.file_restore_failed_message));
}
}
}
private void v(String desc) {
Log.v("DropBoxData", desc);
}
