首先还是衷心感谢林老师的悉心教导
下面直入主题:
seafile对文件的存储类似于网盘,是将所有文件存在服务器上,所以要进行文件操作就必须要调用seafile提供的web api。所以不仅需要一些安卓开发的基本功,也要对http有一定的了解。在这个功能中主要用到的是HttpRequest类。
在Http中对服务器进行传参的方法(HTTPMethod)有以下几种:
DELETE
GET
HEAD
PATCH
POST
PUT
具体区别各个大神介绍已十分详备,此处就不再赘述
通过参考http://manual.seafile.com/develop/web_api.html#delete-file 所给的参数要求,进行delete操作需要用HEAD、DELETE和GET方法传参
其中HEAD中要放入Token,作为与服务器进行数据交流的资格证明,而repo-id和p则要通过get方式放入url的最后进行传参,最终的Sample request如下:
curl -X DELETE -v -H 'Authorization: Token f2210dacd3606d94ff8e61d99b477fd' -H 'Accept: application/json; charset=utf-8; indent=4' https://cloud.seafile.com/api2/repos/dae8cecc-2359-4d33-aa42-01b7846c4b32/file/?p=/foo.c
如果像我一样对HTTP基本功较差的同学可以和rename操作(http://manual.seafile.com/develop/web_api.html#rename-file)比对着学习,rename操作中使用到了HEAD、POST和GET传参,相比较两者的Sample reques可对这些不同的方式有个大概了解,若想要深入并精通,林老师推荐看《HTTP 权威指南》这本书。
如果看过SeafConnection.java中delete函数的同学可能对这里比较迷惑
Map<String, Object> params = new HashMap<String, Object>();
params.put("p", path);
params.put("reloaddir", "true");
这里向服务器传送了一个web-api中没提及的参数reloaddir,他的作用在于对文件进行操作后,本地缓存的文件列表也要更新,通过这个参数服务器会发送一份新的文件列表,这样不仅可以精简代码,也可以提高程序运行效率。解决完最关键的问题后app里面的操作就比较简单,如何创建delete按钮上周我也有所提及,看下NewQuickAction的Demo(https://github.com/haiwen/NewQuickAction)会有助于理解。
徒有按钮并不人性化,需要一个确认弹窗,防止手滑点击delete按钮资料丢失,我便写了一个DeleteFileDialog.java文件,代码也很简单,不在多述
将这些零散的部件都做好后最后在DataManager.java文件中添加一个函数将各部分关联起来便可达成目的。
PS:Seafile程序中写的排BUG代码很精练,也考虑到优先使用更安全的HTTPS方式连接,很值得我们新手学习!
接下来的任务就是抓紧时间将复制、移动功能实现,实现后的总结感想我也会抓紧跟上。