是时候为你的安卓应用加上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.4'

兼容性

安卓P及以上需要配置网络安全策略

 android:usesCleartextTraffic="true"

接口

目前版本是0.0.3,已经实现的功能

  /**
     * 上传文件
     * @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来控制。

3.配置加密解密方式

💡0.0.4新增

如需要自己实现加密解密方式,请实现Encryption接口

public interface Encryption {
    //加密
    public String encode(String key);
    //解密
    public String decode(String password);
}

public class ExampleEncryption implements Encryption {
    @Override
    public String encode(String key) {
        return key+"&";
    }

    @Override
    public String decode(String password) {
        return password.split("&")[0];
    }
}

在配置的时候使用

 SyncConfig config=new SyncConfig(this,new DefaultEncryption());

同时,对应的SyncManager

 SyncManager syncManager=new SyncManager(this,new DefaultEncryption());

特别注意:SyncConfig传入Encryption后对应的SyncManager必须传入相同的Encryption,否则会抛出异常或者登录失败。

常见的出错类型

1.请求失败:出错了,javax.net.ssl.SSLHandshakeException: Chain validation failed

这个一般是手机的时间不对,导致握手失败。请检查模拟器或者手机的时间设置是否和当地地区时间相同

2.请求失败:出错了,com.thegrizzlylabs.sardineandroid.impl.SardineException: Error contacting https://dav.jianguoyun.com/dav/WDSyncer (401 )

这个是账户用户名或者密码不正确

3.Unable to start activity ComponentInfo{com.paul.webdavsyncerdemo/com.paul.webdavsyncerdemo.MainActivity}: java.lang.RuntimeException: 请配置Encryotion

这是由于你在SyncConfig中设置了Encryption而在SyncManager中没有设置

4.java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paul.webdavsyncerdemo/com.paul.webdavsyncerdemo.MainActivity}: java.lang.RuntimeException: Config中未配置Encryotion

这是由于你在SyncConfig没有配置Encryption而在SyncManager中设置了


更多例子请查看项目代码 https://github.com/paul623/WebDavSyncerDemo

欢迎star❤

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值