在我的Android应用程序中,我想从我的Android设备上传文件到dropbox,但是显示异常:
11-21 09:15:00.625: W/DefaultRequestDirector(951): Authentication error: Unable to respond to any of these challenges: {oauth=WWW-Authenticate: OAuth realm="https://api.dropbox.com/"}
11-21 09:15:00.625: I/System.out(951): exception 2
11-21 09:15:00.635: W/System.err(951): com.dropbox.client2.exception.DropboxUnlinkedException
11-21 09:15:00.635: W/System.err(951): at com.dropbox.client2.RESTUtility.parseAsJSON(RESTUtility.java:261)
11-21 09:15:00.635: W/System.err(951): at com.dropbox.client2.RESTUtility.execute(RESTUtility.java:411)
11-21 09:15:00.635: W/System.err(951): at com.dropbox.client2.DropboxAPI$BasicUploadRequest.upload(DropboxAPI.java:1080)
11-21 09:15:00.645: W/System.err(951): at com.dropbox.client2.DropboxAPI.putFile(DropboxAPI.java:1421)
11-21 09:15:00.645: W/System.err(951): at com.hcl.clouddrive.dropbox.DropboxUploadItemsTask.doInBackground(DropboxUploadItemsTask.java:48)
11-21 09:15:00.645: W/System.err(951): at com.hcl.clouddrive.dropbox.DropboxUploadItemsTask.doInBackground(DropboxUploadItemsTask.java:1)
11-21 09:15:00.645: W/System.err(951): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-21 09:15:00.645: W/System.err(951): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-21 09:15:00.645: W/System.err(951): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-21 09:15:00.645: W/System.err(951): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-21 09:15:00.645: W/System.err(951): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-21 09:15:00.655: W/System.err(951): at java.lang.Thread.run(Thread.java:856)**
这是我创建连接的Activity代码:
AppKeyPair accessTokenPair = new AppKeyPair(APP_KEY, APP_SECRET);
AccessTokenPair accessToken = new AccessTokenPair(
ACCESS_KEY_NAME, ACCESS_SECRET_NAME);
AndroidAuthSession session = new AndroidAuthSession(
accessTokenPair, AccessType.DROPBOX, accessToken);
DropboxAPI<AndroidAuthSession> mApi = new DropboxAPI<AndroidAuthSession>(
session);
Log.e("CONNECTION ACTIVITY CHECK", mApi.getSession()
.isLinked() + "");
if (mApi.getSession().isLinked() == false) {
mApi.getSession().startAuthentication(
getApplicationContext());
}
DropboxUploadItemsTask dropboxUploadItemsTask = new DropboxUploadItemsTask(
getApplicationContext(), mApi, filepath);
dropboxUploadItemsTask.execute();
finish();
这是上传任务完成的代码:
public class DropboxUploadItemsTask extends AsyncTask<Void, Long, Boolean> {
private Context uContext;
private DropboxAPI<?> uApi;
private String uPath;
private String mErrorMsg;
private boolean flag = false;
private InputStream uploadFile;
private File file;
SharedPreferences preference;
public DropboxUploadItemsTask(Context context, DropboxAPI<?> api, String filePath) {
uContext = context;
uApi = api;
uPath = filePath;
System.out.println("So I could came this far to Upload file!!");
uApi.getSession();
}
@Override
protected Boolean doInBackground(Void... params) {
System.out.println("Got in background");
System.out.println(uApi);
System.out.println(uPath);
file = new File(uPath);
try {
uploadFile = new FileInputStream(file);
System.out.println("The file id ready");
Entry upload = uApi.putFile("/" + file.getName(), uploadFile, file.length(), null, null);
flag = true;
System.out.println(upload.rev);
} catch (FileNotFoundException e) {
System.out.println("exception 1");
e.printStackTrace();
} catch (DropboxException e) {
System.out.println("exception 2");
e.printStackTrace();
}
return flag;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
showToast("File is uploaded.");
if(file.exists()){
new File(uPath).delete();
System.out.println(file.exists());
}
} else {
showToast(mErrorMsg);
}
}
private void showToast(String msg) {
Toast error = Toast.makeText(uContext, msg, Toast.LENGTH_LONG);
error.show();
}
}