问题
I am trying to upload a file to dropbox. I have configured manifest file, and written the below code. Please help me understand what I am missing here. Activity onClick
Intent uploadToDropbox = new Intent(this, SUploadDB2Dropbox.class);
startService(uploadToDropbox) ;
Service SUploadDB2Dropbox
private DropboxAPI<AndroidAuthSession> mDBApi;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
AppKeyPair appKeys = new AppKeyPair(God.DROPBOX_APP_KEY,
God.DROPBOX_APP_SECRET);
AndroidAuthSession session = new AndroidAuthSession(appKeys);
mDBApi = new DropboxAPI<AndroidAuthSession>(session);
mDBApi.getSession().startOAuth2Authentication(this);
UploadDB2DropBox upload2DropBox = new UploadDB2DropBox(this, mDBApi);
upload2DropBox.execute();
return super.onStartCommand(intent, flags, startId);
}
UploadDB2DropBox AsyncTask
@Override
public String doInBackground(Object... params) {
File file = new File(context.getDatabasePath(God.TABLE_ACTIVATIONS)
+ ".db");
Log.d(God.TAG,
"Database path "
+ context.getDatabasePath(God.TABLE_ACTIVATIONS));
FileInputStream inputStream = null;
try {
String newFileName;
inputStream = new FileInputStream(file);
newFileName = "/" + God.TABLE_ACTIVATIONS
+ Calendar.getInstance().getTimeInMillis() + ".db";
Log.d(God.TAG, "File path " + file.getName() + " len "
+ inputStream.available());
Log.d(God.TAG, " New Filename " + newFileName);
Entry response = mDBApi.putFile(newFileName, inputStream,
file.length(), null, null);
Log.d(God.TAG, "Uploaded file is " + response.rev);
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.e(God.TAG, "FileNotFoundException");
} catch (DropboxException e) {
e.printStackTrace();n
Log.e(God.TAG, "DropboxException");
} catch (IOException e) {
Log.e(God.TAG, "IOException");
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
Log.e(God.TAG, "IOException");
}
}
}
return null;
}
I am getting a dropbox exception. The screen does navigate to the dropbox Allow user
screen (everytime though).
Logcat
02-23 11:44:19.435: D/AutoActivate(27289): Database path /data/data/com.swipex.autoactivate/databases/activations
02-23 11:44:19.436: D/AutoActivate(27289): File path activations.db len 8372224
02-23 11:44:19.546: D/AutoActivate(27289): New Filename /activations1424672059436.db
02-23 11:44:19.702: E/AutoActivate(27289): DropboxException
Manifest File
<activity
android:name="com.dropbox.client2.android.AuthActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask" >
<intent-filter>
<data android:scheme="db-KEY_VALUE_HERE" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
I am getting a UnlinkException
DropboxUnlinkedException - if you have not set an access token pair on the session, or if the user has revoked access.
What am I missing ?
回答1:
Terrible dropbox documentation I must say
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(God.TAG, "Initializing Dropbox");
AppKeyPair appKeys = new AppKeyPair(God.DROPBOX_APP_KEY,
God.DROPBOX_APP_SECRET);
AndroidAuthSession session = new AndroidAuthSession(appKeys);
mDBApi = new DropboxAPI<AndroidAuthSession>(session);
mDBApi.getSession().startOAuth2Authentication(this);
if (mDBApi != null && mDBApi.getSession().authenticationSuccessful()) {
try {
// Required to complete auth, sets the access token on the session
mDBApi.getSession().finishAuthentication();
UploadDB2DropBox upload2DropBox = new UploadDB2DropBox(this,
mDBApi);
upload2DropBox.execute();
//String accessToken = mDBApi.getSession().getOAuth2AccessToken();
} catch (IllegalStateException e) {
Log.i(God.TAG, "Error authenticating", e);
}
}
return super.onStartCommand(intent, flags, startId);
}
This helped. I wonder why dropbox keeps asking for permission from the UI. Its stupid to use this api if I have to keep asking for permission.
来源:https://stackoverflow.com/questions/28428719/dropboxunlinkedexception-if-you-have-not-set-an-access-token-pair-on-the-sessi