Android 使用 DropBox Sync API 同步一个文件



大家下午好。
我有非常简单的笔记应用程序,我想做简单的事情 - 根据用户的需求,应用程序应将其"notes_db"文件与云
中的版本同步(在第一阶段,我想同步整个"notes_db"文件,以简化(。

由于我还没有足够的技能来编写自己的 Web 服务器及其 API,因此决定使用 DropBox Sync API 来实现我的目的。
目前,我已经在我的应用程序中成功实现了用户授权。
我想,我会指示"notes_db"文件并向同步 API 说"同步此文件!"- 此文件将同步到云。
但现在对我来说并不容易:-(。

我的第一个问题是 - 我理解正确吗,我无法通过 DropBox 同步 API 同步要同步的特定文件(在我的情况下,这是位于"/databases/notes_db"的文件(?
第二个问题 - 在这种情况下应该是什么同步机制?

我的猜测是我应该做下一步
(我猜我会有 3 个版本的"notes_db"文件 - 本地(我的应用程序将在其中进行更改(、本地缓存和云版本(:
1(在DropBox文件系统中创建空文件"notes_db"(如果我理解正确,它将创建本地缓存和云版本(或尝试打开它(如果存在(;
2(将本地版本的内容传输到刚刚创建的本地缓存版本;
3(调用一些方法(哪个?(将更改从本地缓存同步到云版本。

然后,在下一次同步调用时:
1(比较文件 - 云,本地缓存和本地版本;
2(如果本地版本是最新版本 - 将其内容传输到本地缓存版本并启动同步;
3(如果云版本是最新版本 - 在本地缓存中获取它并将其内容传输到文件的本地版本。

另外 - 创建 Dropbox 文件系统后,我应该调用哪些方法? hasSynced((, listFolder((, awaitFirstSync((, syncNowAndWait((, getSyncStatus((?
老实说,我现在完全糊涂了。

或者可能有更简单的方法来解决我的问题 - 无论是通过 DropBox Sync API 还是其他方式?

如果有人可以提供有用的教程或工作示例来同步一个文件 - 我将不胜感激。

并感谢您的任何帮助!
这个问题现在对我来说真的很重要。

好的,朋友们。
仍然不知道,这是解决我的问题的最佳方法吗,但它正在工作并解决了我的问题。
基于机制,如上所述:

第一步。
获取 dbx文件系统(前提是我们已经有链接帐户(并决定需要执行哪个操作:

try {
   dbxFileSystem = DbxFileSystem.forAccount(mDbxAcctMgr.getLinkedAccount());
   if (dbxFileSystem.exists(dbxPath)) {
      dbxFile = dbxFileSystem.open(dbxPath);
      if (_myNotesQuantityCount == 0) {
         try {
            writeFromCloud(dbxFile.getReadStream());
         } catch (IOException e) {
              Toast.makeText(error text).show();
         }
      }
      else {
         writeToCloud();
      }
   }
   else () {
      dbxFile = dbxFileSystem.create(dbxPath);
      writeToCloud();
   }
}

第二步。
执行所需的操作:
将本地文件写入云版本

public void writeToCloud() {
        try {
            dbxFile.writeFromExistingFile(_localDBLocation, false);
        } catch (IOException e) {
            Toast.makeText(error text).show();
        } finally {
            dbxFile.close();
        }
    }

将云版本写入本地文件

public void writeFromCloud(FileInputStream inputStream) {
        try {
            outputStream = new FileOutputStream(_localDBLocation);
            byteBuffer = new byte[1024];
            int length;
            try {
                while ((length = inputStream.read(byteBuffer)) > 0) {
                    outputStream.write(byteBuffer,0,length);
                }
                outputStream.flush();
                outputStream.close();
            } catch (IOException e) {
                Toast.makeText(this, error text).show();
            } finally {
                dbxFile.close();
            }
        } catch (FileNotFoundException e) {
            Toast.makeText(error text).show();
        } finally {
            dbxFile.close();
        }
    }

我遇到的一个问题是,与云的同步不是即时的。
我想正确的方法是为文件更改设置侦听器,但我只是稍微暂停了我的线程并再次调用同步(SOF 上有一个关于调用两次的问题(。

现在它正在工作!无论如何,如果有人有什么需要改进或更好的解决方案 - 我很高兴听到它。

相关内容

最新更新