WebDav是什么?
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
上面是来自百度百科的介绍。从个人理解是:安卓开发有时候并不是一个完整的系统,即没有账号系统,没有必要特地去写一个后台搭建一个数据库来维护这些数据。然而诸如笔记、日程等数据,应用不能很好地保存就显得很不人性化。而WebDav就像github一样,应用可以将数据托管在上面,更新数据就上传,恢复数据就下拉,方便安全,对于个人开发者无疑是一个很好的选择。
那么,开发者该如何接入WebDav呢?
期间我写了一篇关于WebDav for Android文章,由于sardine是需要多线程来执行的,会写许多重复代码,因此就萌生了把代码封装成一个库直接调用的想法。
关于WebDav的配置可以参考http://help.jianguoyun.com/?tag=webdav
手机端可以参考 坚果云手机端同步教程
如何食用
implementation 'com.paul623.wdsyncer:wdsyncer:0.0.1'
兼容性
安卓P及以上需要配置网络安全策略
android:usesCleartextTraffic="true"
接口
目前版本是0.0.1,已经实现的功能
/** * 上传文件 * @param fileName 文件名 包含后缀名 * @param fileLoc 文件目录 如:homeLoc/ * @param listener 返回信息为 文件路径,上传成功 * */ public void uploadFile(String fileName, String fileLoc, File f, OnSyncResultListener listener); /** * 上传String类型数据 * 你可以直接把文件格式设置为txt即可 * @param fileName 文件名 包含后缀名 * @param fileLoc 文件目录 如:homeLoc/ * @param listener 返回信息为 文件路径,上传成功 * */ public void uploadString(String fileName, String fileLoc, String content, OnSyncResultListener listener); /** * 下载文件 * @param listener 返回的是文件保存路径 * 默认保存路径在:应用的私有路径下 * */ public void downloadFile(String fileName, String fileLoc, OnSyncResultListener listener); /** * 下载文件 * @param listener 返回的是内容 * */ public void downloadString(String fileName, String fileLoc, OnSyncResultListener listener); /** * 列出所有文件信息 * @param listFileListener 具体参看DavData * */ public void listAllFile(String dir, OnListFileListener listFileListener); /** * 删除文件 * @param fileDir 文件目录 * */ public void deleteFile(String fileDir, OnSyncResultListener listener);
使用示例
1.配置账户信息
请提前通过SyncConfig来配置相关信息(账户、密码、服务器地址)(否则会报错)
服务器地址可以不用配置,默认为坚果云
SyncConfig config=new SyncConfig(context); config.setPassWord("你的密码"); config.setUserAccount("你的账户");
2.调用并回调
由于所有操作都必须在线程中执行,故你需要自行处理线程操作,这里以上传为例。
SyncManager syncManager=new SyncManager(MainActivity.this); syncManager.uploadString("test.txt", "WDSyncer", "如你所见,WebDavSyncer已经配置成功!", new OnSyncResultListener() { @Override public void onSuccess(String result) { //成功 Looper.prepare(); Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show(); Looper.loop(); } @Override public void onError(String errorMsg) { //失败 Looper.prepare(); Toast.makeText(MainActivity.this,errorMsg,Toast.LENGTH_SHORT).show(); Looper.loop(); } });
或者你可以使用Handler来控制。
更多例子请查看项目代码 https://github.com/paul623/WebDavSyncerDemo
欢迎star❤