大家下午好。
我有非常简单的笔记应用程序,我想做一个简单的事情 - 在用户的需求应用程序应该将其“notes_db”文件与云中的版本同步
(在第一阶段,我想同步整个“notes_db”文件,以简化)。
由于我还不熟练使用其API编写我自己的网络服务器,因此我决定使用DropBox Sync API。
此时我已在我的应用程序中成功实现了用户授权
我想,我会指出“notes_db”文件并说“同步这个文件!”同步API - 此文件将同步到云。
但现在对我来说并不容易: - (。
我的第一个问题是 - 我是否理解正确,我无法通过DropBox Sync 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还是以其他方式解决?
如果有人可以提供有用的教程或同步一个文件的工作示例 - 我将非常感激。
感谢您的帮助! 这个问题对我来说非常重要。
答案 0 :(得分:0)
好的,朋友们
仍然不知道,这是解决我的问题的最佳方式,但它正在解决我的问题。
基于机制,如上所述:
第一步。
获取dbxFileSystem(假设我们已经有linkedAccount)和 决定 ,需要执行以下操作:
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上有一个关于调用两次的问题)。
现在它正在工作! 无论如何,如果有人有改进或更好的解决方案 - 我很高兴听到它。