android 云端数据,WebDav Android开发-免费的云端数据存取

先上图上链接

Demo项目地址:传送门

Demo效果图d8ab7940a41f9ebbdd29c94042be8c03.gif

前言

我自己对数据存取有需求,所以研究了几天最终决定存在坚果云。

因为坚果云免费的,支持WebDav,用来存取用户数据确实是不错的,在开发之前网上找到的关于资料很少,通过查看其他相同需求软件最后找到了sardine这个项目,项目地址:传送门

一、开始前的配置

1. 添加依赖库

查看最新版本号:传送门

dependencies {

...

implementation 'com.thegrizzlylabs.sardine-android:sardine-android:最新版本号'

}

复制代码

2. 添加各种权限

复制代码这里有两个坑

安卓9以上的网络安全策略:谷歌官方文档

安卓10沙箱限制:谷歌官方文档

解决办法:

右键res文件夹新建一个目录选择xml

16197de04c50ffe96ce14af0e966f688.png

之后右键xml文件夹新建一个名为network_security_config.xml的xml文件(名字自己取一个)

在文件中输入

www.pgyer.com

app-global.pgyer.com

复制代码

在AndroidManifest.xml文件中添加

android:networkSecurityConfig="@xml/network_security_config"

...

复制代码

解决第二个坑,文件访问限制

在AndroidManifest.xml文件中添加

android:requestLegacyExternalStorage="true"

...

复制代码

接下来去申请WebDav的账号用来测试

坚果云:点击进入

进去注册完成之后,点击右上角账户信息c4ef124207a9feaa57c8cc5478693c21.png

我们需要拿到的三个信息:

服务器地址 账号 密码

把这三样保存一下,待会儿测试用

二、一些操作

注:必须在新线程中执行操作

我的方法是写一个类继承AsyncTask操作,逻辑操作看demo

初始化

Sardine sardine = new OkHttpSardine();//实例化

sardine.setCredentials(账号, 密码);

复制代码

连接服务器

//通过判断文件夹是否存在去判断是否连接成功,如果错误会抛出异常 返回false

//会在WebDav中新建一个名为Test的文件夹

if (!sardine.exists("https://dav.jianguoyun.com/dav/Test/")) {

//不存在目录即创建

sardine.createDirectory("https://dav.jianguoyun.com/dav/Test/");

}

复制代码

判断文件/文件夹是否存在

if (sardine.exists("https://dav.jianguoyun.com/dav/Test/Test.apk")) {

//文件存在

}

复制代码if (sardine.exists("https://dav.jianguoyun.com/dav/Test/")) {

//文件夹存在

}

复制代码

上传文件

if (sardine.exists("https://dav.jianguoyun.com/dav/Test/Test.apk")) {

//YourCode

//如果同名文件存在

Log.e("isHava:", fileName);

} else {

//第一个参数是webdav的存放路径,第二个参数是本机文件路径,第三个http请求头

sardine.put("https://dav.jianguoyun.com/dav/Test/Test.apk", new File(filePath), "application/x-www-form-urlencoded");

}

复制代码

下载文件

InputStream fis = sardine.get("https://dav.jianguoyun.com/dav/Test/Test.apk");//服务器上的文件名字

FileOutputStream fos = new FileOutputStream("/storage/emulated/0/Test.apk");//下载的路径

int len = -1;

byte[] buffer = new byte[1024];

while ((len = fis.read(buffer)) != -1) {

fos.write(buffer, 0, len);

}

fis.close();

fos.close();//关闭输入输出流

复制代码

删除文件

sardine.delete("https://dav.jianguoyun.com/dav/Test/Test.apk");

复制代码

获取WebDav中的文件

List resources = null;

resources = sardine.list("https://dav.jianguoyun.com/dav/Test/");//后面需斜杠

for (DavResource res : resources) {

//YourCode

Log.e("WebDavFile:", res.toString());//获取webdavDir文件夹内的文件名字

//格式为/dav/Test/Test.apk

}

复制代码

分隔获取文件完整名字

//分隔字符串"/",获取长度-1为文件名字,可以直接在上一步中处理出来

filePath.split("/")[filePath.split("/").length - 1];//根据路径获取文件名

复制代码下图将文件列表写入适配器列表中,在子线程中无法刷新UI,子线程可以通过Handler来将UI更新操作切换到主线程中执行,具体操作看Demo

398e0a0f210a87b3b0001d2c6b7a046e.png

三、后言

据我的查找国内支持 WebDAV 协议的网盘只有坚果一家,每月有 1GB 的上传流量和 3GB 的下载流量,对于我来说存储数据完全够用

再此之前自己写了一个我自己有需求的软件,用来备份整个文件夹的

感谢各位的阅读,因为本人学习安卓时间并不长,文章中和Demo中出现什么问题,欢迎大家及时指正。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值