Android開發記錄(5)-AndServer,android端的Web服務器使用

這次應老板要求實現在設備端搭建一個webserver,供內網直接使用實現需要的業務邏輯。絕了!身為android應用開發竟然需要了解web服務器。在這之前先嘗試了i-jetty,但還是不太利于android端的開發,所以于是有了這篇給大家介紹使用一個強大的Android端的Web服務器。

先說下應用場景

按照國際慣例,肯定要舉個栗子!如同前言所說,其實這個web服務器的應用場景非常廣而且方便。
1.如果企業內多臺android設備需要一些系統配置,那么就需要管理員一一跑到設備前打開設置>填寫參數>吧嗒吧嗒吧嗒....(繁瑣)。那么如果每臺設備提供這樣一個可以遠程操作直接配置的web界面呢!!
2.如果希望做一個單機版業務(場景較小,又不想要購置服務器),供內網直接使用操作。想象android設備就是個服務器,還可以直接辦公pc登錄web進行各種業務操作,體驗就很好!!

是不是簡單的兩個例子,就能感受到好處了,其他什么局域網內下載上傳的就先不說了!

快速入門使用

這里先給上AndServer開源項目,以及作者的詳細介紹AndServer,一個Android端的web服務器,感謝作者的無私分享~~這里參考AndServer開發文檔更有幫助

1.Sample

開源項目內自帶了一實現用戶登錄的例子,通過表單請求服務器驗證用戶和密碼返回結果。
結合開發手冊可直接清晰明地了解其中的使用方法。


Sample.gif

這里設備端也就是服務器的ip地址是192.168.1.48,應用端口默認8080。

2.基于Sample修改的房間展板案例

需求場景:在Android房間展板屏上搭建一個AndServer
1.自定義web端界面(當然是要拜托前端同事)
2.web端支持獲取展板狀態,和展板名稱等屬性
3.web端支持修改展板名稱等屬性
簡單這實現三點,不過這三點也差不多能符合大部分情況了。

數據庫

數據庫當然是必須的,這里使用的是GreenDao,關于android的GreenDao可自行查閱。
build后的實體類如下:

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;

@Entity
public class DaoRoom {
    @Id(autoincrement = true)
    private Long id;
    //房間名稱
    private String roomName;
    //容納人數
    private Integer number;
    //房間設備
    private String equipment;
    @Generated(hash = 800482737)
    public DaoRoom(Long id, String roomName, Integer number, String equipment) {
        this.id = id;
        this.roomName = roomName;
        this.number = number;
        this.equipment = equipment;
    }
    @Generated(hash = 332995214)
    public DaoRoom() {
    }
    public String getRoomName() {
        return this.roomName;
    }
    public void setRoomName(String roomName) {
        this.roomName = roomName;
    }
    public Integer getNumber() {
        return this.number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }
    public String getEquipment() {
        return this.equipment;
    }
    public void setEquipment(String equipment) {
        this.equipment = equipment;
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

提供web端http api接口

這里就要介紹到AndServer的好用之處了,RequestMapping。
它可以規定一個Http Api請求路徑、請求方法、參數校驗、請求頭校驗、Accept、ContentType等重要規則。
代碼如下:

import com.yanzhenjie.andserver.annotation.GetMapping;
import com.yanzhenjie.andserver.annotation.PathVariable;
import com.yanzhenjie.andserver.annotation.PostMapping;
import com.yanzhenjie.andserver.annotation.RequestBody;
import com.yanzhenjie.andserver.annotation.RequestMapping;
import com.yanzhenjie.andserver.annotation.RestController;
import com.yanzhenjie.andserver.http.HttpRequest;
import com.yanzhenjie.andserver.http.HttpResponse;
import com.yanzhenjie.andserver.sample.greendao.DaoUtil;
import com.yanzhenjie.andserver.sample.model.ResponseBean;
import com.yanzhenjie.andserver.sample.util.JsonUtils;
import com.yanzhenjie.andserver.sample.util.Logger;
import com.yanzhenjie.andserver.util.MediaType;

@RestController
@RequestMapping(path = "/room")
public class RoomController {

    /**
     * 查詢房間信息
     * @return
     */
    @GetMapping(path = "/info")
    ResponseBean info() {
        return DaoUtil.getRoomInfo();
    }
    /**
     * 更新房間信息
     * @param request
     * @param response
     * @param jsonStr
     * @return
     */
    @PostMapping(path = "/update",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    ResponseBean booking(HttpRequest request, HttpResponse response, @RequestBody String jsonStr){
        Logger.i("Body:"+JsonUtils.toJsonString(request.getBody()));
        return DaoUtil.updateRoomInfo(jsonStr);
    }
}

類上可直接添加@RequestMapping(path = "/room")簡化。路徑依次為/room/info和/room/update,json通信,主要提供了GET房間屬性和POST更新房間屬性兩條。路徑
這里的ResponseBean類和DaoUtil數據庫操作工具可自行封裝修改。

當然要驗證接口了。這里因為只實現個單頁面demo,所以沒有對PageController做修改。

替換我們的Website

AndServer提供了AssetsWebsite、StorageWebsite、FileBrowser,從名稱也能看出來,StorageWebsite需要指定web原文件在設備中的存儲路徑,好處是可以方便更換。這里應場景使用的AssetsWebsite,可直接原文件替換sample內的assets文件。
如圖所示:


目錄.png
結果
結果.gif

流程很簡單,但是這個思路已經可以做很多事情了!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容