我正在尝试将文件上传到Dropbox。我已经配置了清单文件,并编写了下面的代码。请帮我理解我在这里缺少的东西。 活动onClick
Intent uploadToDropbox = new Intent(this, SUploadDB2Dropbox.class);
startService(uploadToDropbox) ;
服务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;
}
我收到了一个Dropbox异常。屏幕会导航到Dropbox Allow user
屏幕(不过每次都会)。
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
清单文件
<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>
我收到了一个UnlinkException
DropboxUnlinkedException - 如果您尚未在会话上设置访问令牌对,或者用户已撤消访问权限。
我错过了什么?
答案 0 :(得分:0)
糟糕的Dropbox文档我必须说
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);
}
这有帮助。我想知道为什么dropbox不断要求UI的许可。如果我不得不继续请求许可,那么使用这个api是愚蠢的。