2013-10-02 41 views
1

我從來沒有使用過Dropbox API,我注意到有2個API可用於Core和Sync,我不知道我應該使用哪一個。以下是我想要做的事情:雙向同步應用程序,核心API或同步API?

簡單的雙向同步將用戶Dropbox上的文件夾鏡像到設備,反之亦然。該文件夾可以包含任何類型的文件。當在應用程序控制臺上製作應用程序時,它會詢問權限,看起來完整的保管箱權限僅與Core API兼容。

是否有人能夠闡明我需要使用哪種API? 謝謝!

編輯:我創建了一個具有完整保管箱權限的應用程序,但未能使用Sync API(如創建頁面所述),所以我做了另一個允許文本文件的應用程序,然後創建了一個.dat文件導致以下錯誤:

DROPBOX_DISALLOWED: sync.hpp:300: app is not allowed to create file p(/c7/r6/t4.dat) 

有什麼辦法解決這個特別發行或我將不得不使用核心API?似乎有點限制,應用程序只能使用某些文件類型。

EDIT2:用現在來測試我的代碼:

public void SyncTest() { 
    try { 
     DbxFileSystem dbxFs = DbxFileSystem.forAccount(mDbxAcctMgr.getLinkedAccount()); 

     DbxFile testFile = dbxFs.create(new DbxPath(getString(R.string.remote_path) + "hello.dat")); 
     try { 
      testFile.writeString("Hello Dropbox!"); 
     } catch(IOException ioe) { 

     } finally { 
      testFile.close(); 
      dbxFs.syncNowAndWait(); 
     } 
    } catch(com.dropbox.sync.android.DbxException.Unauthorized ue) { 
     alert(getString(R.string.unauth)); 
    } catch (com.dropbox.sync.android.DbxException se) { 

    } 
} 

應用程序許可類型爲 「文本文件」。當使用「全Dropbox的」一個應用程序,我得到一個不同的錯誤:

DROPBOX_ERROR_USAGE: sync.cpp:244: This app is not allowed to use the Sync API for file access. 

回答

1

我從來沒有使用Core API,但我都能夠下載和接收文件。

值得一提的是,Sync API(也可能是核心)的意圖並不是保持本地文件的最新狀態。相反,它旨在讓您檢索Dropbox上可用的文件並即時下載。

我的用例需要在本地檢索Dropbox文件,因此我運行一個同步算法,通過所有Dropbox文件運行,檢查修改後的大小並將所有新文件或修改後的文件下載到SD。 使用IntentServices完成下載。爲每個需要下載的文件發佈一個IntentService。

因此,對於單向同步,Sync API工作正常。另一種方式也應該是可能的,儘管我更難以管理。

底線是,你應該能夠做到這一點,但你必須做很多解除自己。

我看到的幾個關於Core API的問題,除了Sync API存在於特定的Dropbox文件夾「Dropbox/apps/yourapp」中,我沒有發現任何巨大差異,Core API沒有。

如果是這種情況,我會推薦Sync API,因爲它似乎更容易處理。

我願意張貼我的代碼爲單向同步,如果你選擇去了:)

編輯:增加了我的代碼寫入到Dropbox的

public class DropboxWriter { 

private static final String TAG = "DropboxWriter"; 

public static boolean writeAssetBinary(Context context, String assetFile, 
     DbxFile toFile) { 

    String tempsdpath = Environment.getExternalStorageDirectory() 
      .toString() + "/temp"; 

    AssetManager assetManager = context.getAssets(); 

    OutputStream outputStream = null; 
    InputStream inputStream = null; 
    try { 
     inputStream = assetManager.open(assetFile); 
     outputStream = new FileOutputStream(tempsdpath + "/" + assetFile); 
     byte buf[] = new byte[1024]; 
     int len; 
     while ((len = inputStream.read(buf)) != -1) { 
      outputStream.write(buf, 0, len); 
     } 

    } catch (IOException e) { 
     Log.e(TAG, e.getMessage(), e); 
    } finally { 
     if (inputStream != null) { 
      try { 
       inputStream.close(); 
      } catch (IOException e) { 
      } 
     } 
     if (outputStream != null) { 

      try { 
       outputStream.flush(); 
       outputStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    try { 
     File file = new File(tempsdpath, assetFile); 
     toFile.writeFromExistingFile(file, false); 
     return true; 
    } catch (IOException e) { 
     Log.e(TAG, e.getMessage(), e); 
    } finally { 
     toFile.close(); 
    } 
    return false; 
} 

public static boolean writeAssetText(Context context, String assetFile, 
     DbxFile toFile) { 

    AssetManager assetManager = context.getAssets(); 
    ByteArrayOutputStream outputStream = null; 
    InputStream inputStream = null; 
    try { 
     inputStream = assetManager.open(assetFile); 
     outputStream = new ByteArrayOutputStream(); 
     byte buf[] = new byte[1024]; 
     int len; 
     while ((len = inputStream.read(buf)) != -1) { 
      outputStream.write(buf, 0, len); 
     } 
     outputStream.flush(); 
     outputStream.close(); 
     inputStream.close(); 
    } catch (IOException e) { 
     Log.e(TAG, e.getMessage(), e); 
    } 

    try { 
     toFile.writeString(outputStream.toString()); 
     return true; 
    } catch (IOException e) { 
     Log.e(TAG, e.getMessage(), e); 
    } finally { 
     toFile.close(); 
    } 
    return false; 
} 
} 

直到這點我只需要從資產寫入文件,但可以很容易地重寫爲從任何其他文件寫入。

+0

我明白了,我現在遇到的問題是Dropbox應用程序控制臺只允許我在Dropbox上訪問某種類型的文件,就像只有文本文件或只有圖像,但我需要訪問所有種類的一些,甚至沒有列出製作應用程序時選擇「特定文件類型」選擇器。你是怎麼弄到的? – Linkandzelda

+0

我設置了一個應用程序來處理文本文件,並試圖製作一個.dat文件,它給了這個:DROPBOX_DISALLOWED:sync.hpp:300:app不允許創建文件p(/c7/r6/t4.dat)。 – Linkandzelda

+0

你可以發佈你遇到這個錯誤的代碼嗎?到目前爲止,我一直在上傳/下載.txt .png .class .pdf和一個沒有擴展名的單個二進制文件。 – cYrixmorten

0

以及它取決於你要創建應用程序的類型..

如果你想同步文件
  • 和文件夾,而不是文件中的內容使用Core API。因爲它支持多種平臺,所以我看到的核心Api只支持文件的下載和上傳,而不是文件中的編輯或更改
  • 如果您還想同步文件內容,請使用sync Api。因爲Sync Api可以同步文件中的更改。

我認爲如果你不想獲得完整的Dropbox權限,同步API應該對你有用。

1

我的一般建議是在移動平臺上使用Sync API。在下面仍然是相同的Core API,但Sync API爲您提供了一個看起來像普通文件系統一樣的Dropbox視圖。這通常比直接使用Core API更簡單。

至於權限,Sync API不支持「完整Dropbox」權限,因此您必須使用「文件類型」權限(通過擴展訪問特定類型的文件)或「應用程序文件夾」權限(訪問任何類型的文件,但只能在您的應用程序的指定文件夾內,例如Dropbox/Apps /)。

+0

我想Dropbox Apps文件夾是唯一的方法去如果我想要沒有核心API的所有文件類型訪問。謝謝(你的)信息。 – Linkandzelda