【Android】是時候為你的應用加上WebDav同步了
WebDav是什麼?
WebDAV (Web-based Distributed Authoring and Versioning) 一種基於 HTTP 1.1協議的通訊協議。它擴展了HTTP 1.1,在GET、POST、HEAD等幾個HTTP標準方法以外添加了一些新的方法,使應用程式可對Web Server直接讀寫,並支援寫文件鎖定(Locking)及解鎖(Unlock),還可以支援文件的版本控制。
上面是來自百度百科的介紹。從個人理解是:Android開發有時候並不是一個完整的系統,即沒有帳號系統,沒有必要特地去寫一個後台搭建一個資料庫來維護這些數據。然而諸如筆記、日程等數據,應用不能很好地保存就顯得很不人性化。而WebDav就像github一樣,應用可以將數據託管在上面,更新數據就上傳,恢複數據就下拉,方便安全,對於個人開發者無疑是一個很好的選擇。
那麼,開發者該如何接入WebDav呢?
期間我寫了一篇關於WebDav for Android文章,由於sardine是需要多執行緒來執行的,會寫許多重複程式碼,因此就萌生了把程式碼封裝成一個庫直接調用的想法。
關於WebDav的配置可以參考//help.jianguoyun.com/?tag=webdav
手機端可以參考 堅果雲手機端同步教程
如何食用
implementation 'com.paul623.wdsyncer:wdsyncer:0.0.1'
兼容性
AndroidP及以上需要配置網路安全策略
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來控制。
更多例子請查看項目程式碼 //github.com/paul623/WebDavSyncerDemo
歡迎star❤