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❤

【Android】是时候为你的应用加上WebDav同步了的更多相关文章

  1. Android Gradle实用技巧——APK文件名中加上SVN版本号,日期等

    有时候,我们会希望能把APK文件名上带上打包日期,打包时svn的版本号,应用版本号等.当然这些也可以手动添加,但是手动的话也未免太不优雅了,而且可能会出错. 利用Gradle,我们可以让打包出来的ap ...

  2. Android Studio连接SQLite数据库与SQLite Studio实时同步的实现

    最近学习用到了android开发连接数据库这一块,发现连接成功后,都要先访问安卓项目的数据库路径data/data/项目/databases,然后把对应的db文件拷出来,再在SQLite的可视化工具中 ...

  3. 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  4. 九宫格 android:stretchMode="columnWidth",缩放与列宽大小同步

    转载▼   <GridView android:id="@+store/grid" android:layout_width="wrap_content" ...

  5. android帧动画,移动位置,缩放,改变透明度等动画讲解

    1.苦逼的需求又来了,需要实现一些动画效果,第一个想到的是播放gif图片,但是这样会占包的资源,并且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享 ...

  6. Android开发2:事件处理及实现简单的对话框(Toast,AlertDialog,Snackbar,TextInputLayout的使用)

    前言 啦啦啦~又要和大家一起学习Android开发啦,博主心里好激动哒~ 在上篇博文中,我们通过线性布局和基础组件的使用,完成了一个简单的学生课外体育积分电子认证系统的界面,本篇博文,将和大家一起熟悉 ...

  7. Android 面试题汇总

    面试题基础储备 1.Activity相关 a.Activity的特点 1.可见  2.可交互 他之所以可交互,是因为他同时实现了Window.Callback和KeyEvent.Callback, 可 ...

  8. 大叔也说Xamarin~Android篇~环境部署与破解

    回到目录 现在移动开发很HOT,以至于很多人都转向了它,大叔也不例外,这次有机制接触一下xamarin这个东西,其实之前也用于xamarin,只是用来写网页程序,没有接触到移动开发,对于xamarin ...

  9. Android Studio常见问题 -- uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library

    问题描述 * What went wrong:Execution failed for task ':app:processDebugManifest'.> Manifest merger fa ...

随机推荐

  1. RT-Thread—STM32—在线升级(Ymodem_OTA、HTTP_OTA)

    概述 本教程主要根据官方推荐的教程进行改编,详细信息请参考OTA Downloader软件包STM32 通用 Bootloader 本例程通过自己实际搭建环境,测试总结. bootloader的制作 ...

  2. Linux操作系统进入单用户模式的方法

    单用户模式的作用 在使用Linux的过程中,维护人员经常会碰到一些问题,就是在拥有root账号权限和密码的用户中,总是会出现忘记root密码的情况. 遇到这种情况,一般情况下,维护人员就会通过最常用的 ...

  3. IDEA 之 Java项目复制

    1.复制一个项目,并改名字  2.更改以下文件名字  3.将以下文件中的原有名字,替换成更改后的名字(例如MyWebapp07替换成MyWebapp08) 4.将out文件夹给删除 5.然后用IDEA ...

  4. SQL计算算数表达式的函数自定义(加减乘除)

    一.整体思路:循环遍历表达式字符串,设置一个index从第一个字符开始检测当前数字是否可以和后面的数字进行运算,如果可以运算,将两个数挑出来运算,然后用运算的结果替换原来表达式中的这两个数和符号,计算 ...

  5. Linux 搭建nginx的PID

    pid logs/nginx.pid 安装的时候就是没有,其实在启动 nginx 时自动生成的 里面存放的是 当前 nginx 住进程的 ID 号:所以在配置文件中指定pidpid /usr/loca ...

  6. 第 43 章 Baidu Map

    43.1. BMap.Circle var point = new BMap.Point(22.111, 114.111); var styleCircleF = { strokeColor:&quo ...

  7. #if 和#ifdef的区别

    转自:https://blog.csdn.net/zhangchiytu/article/details/7563329 先看个例子:#define TARGET_LITTLE_ENDINA 1#de ...

  8. 实战-MySQL定时增量备份(2)

    概要 引言 增量备份 恢复增量备份 定时备份 引言 在产品上线之后,我们的数据是相当重要的,容不得半点闪失,应该做好万全的准备,搞不好哪一天被黑客入侵或者恶意删除,那就 gg 了.所以要对我们的线上数 ...

  9. nodejs操作MySQL,mysql连接池及事务的使用

    https://blog.csdn.net/jasnet_u/article/details/88605168

  10. 一个epoll的简单例子

    epoll事件机制的触发方式有两种:LT(电平触发)和ET(边沿触发) EPOLLIN事件: 内核中的socket接收缓冲区 为空(低电平) 内核中的socket接受缓冲区 不为空(高电平) EPOL ...