是时候为你的安卓应用加上WebDav同步了

WebDav是什么?

WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GETPOSTHEAD等几个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❤