2015-02-10 38 views
0

我正嘗試將文件上傳到Dropbox。我配置了清單文件,並編寫了下面的代碼。請幫助我瞭解我在這裏失蹤的內容。 活動的onclickDropboxUnlinkedException - 如果您尚未在會話上設置訪問令牌對,或者用戶已撤銷訪問

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的例外。屏幕確實導航到保存框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

爲了說明,您的** >> EXCEPTION_HERE **標記位於Log.e行上。它實際上是發生在那條線上,還是在它上面的一條線上? – Greg 2015-02-10 23:10:24

+0

對不起,我會改正的,我看你在說什麼。 – Siddharth 2015-02-11 04:39:58

+0

你指出'putFile'這一行,但是堆棧跟蹤似乎沒有提到這一點,甚至沒有提到你發佈的'UploadDB2DropBox'類。你確定這個例外來自這個代碼嗎?它看起來像這裏有關於此錯誤的另一個問題:http://stackoverflow.com/questions/11308260/chooseractivity-has-leaked-intentreceiver – Greg 2015-02-11 21:23:39

回答

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會很愚蠢。

+0

是的,你能提出正確的答案,我很高興刪除這個答案。 – Siddharth 2015-02-24 12:14:35

+1

@smarx,你是一個保管箱開發者,你能回答這個問題,而不是一個downvoter和一個批評者嗎? – Siddharth 2015-02-24 15:23:36

+0

我完全同意你的看法。 – 2015-04-01 21:53:26