我在Android应用中使用Dropbox Sync API将Photo放在Dropbox上。 照片存储在DbxFile中。创建文件后,我可以立即重新打开它们,但是一旦文件上传,我就无法在移动设备上打开大约一半的文件。 (在我的电脑上,它们没问题。) 对于不再可访问的文件,Sync api似乎知道有更新的版本,但由于某种原因它们没有更新。
public Bitmap getBitmapFromFile(String path) throws Exception {
DbxFile dbxFile = dbxFileSystem.open(new DbxPath(path));
DbxFileStatus newerStatus = dbxFile.getNewerStatus();
if (newerStatus != null && newerStatus.isCached) {
// this is +/- one-half of the time the case. Appears to be random?
dbxFile.update(); //This is executed, but no update??
}
Bitmap bitMap = BitmapFactory.decodeStream(dbxFile.getReadStream());
dbxFile.close();
return bitMap;
}
当我尝试打开不再可访问的文件时,此行显示在LogCat中:
libDropboxSync.so(open) file.cpp:329: opening at (da618e76aab is latest)
通过打开文件没有问题,此行显示:
libDropboxSync.so(open) file.cpp:336: opening at da418e76aab (latest)
为什么更新没有执行? 非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
只有在打开文件时,Sync API才会开始下载文件的新内容。要下载该文件的新版本,您需要打开该文件并将其保持打开状态(并注册一个监听器,以便您知道下载何时完成)。
在您的代码中,您打开文件然后几乎立即再次关闭它。这意味着您几乎永远不会获得新版本的文件,并且只会永远读取相同的缓存版本。
除非在非常罕见的时间条件下,我希望您的条件newerStatus.isCached
永远不会成立,因为您之前只是打开了一行文件。 (打开文件应该会给你最新的缓存版本,所以不应该是一个已经缓存的新版本......否则你就已经得到了它。)