WebDav是什么?
WebDAV (Web-based Distributed Authoring and Versioning) 一種基於 HTTP 1.1協議的通信協議。它擴展了HTTP 1.1,在GET、POST、HEAD等幾個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.3'
兼容性
安卓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來控制。
更多例子請查看項目代碼 https://github.com/paul623/WebDavSyncerDemo
歡迎star❤