這次應老板要求實現在設備端搭建一個webserver,供內網直接使用實現需要的業務邏輯。絕了!身為android應用開發竟然需要了解web服務器。在這之前先嘗試了i-jetty,但還是不太利于android端的開發,所以于是有了這篇給大家介紹使用一個強大的Android端的Web服務器。
先說下應用場景
按照國際慣例,肯定要舉個栗子!如同前言所說,其實這個web服務器的應用場景非常廣而且方便。
1.如果企業內多臺android設備需要一些系統配置,那么就需要管理員一一跑到設備前打開設置>填寫參數>吧嗒吧嗒吧嗒....(繁瑣)。那么如果每臺設備提供這樣一個可以遠程操作直接配置的web界面呢!!
2.如果希望做一個單機版業務(場景較小,又不想要購置服務器),供內網直接使用操作。想象android設備就是個服務器,還可以直接辦公pc登錄web進行各種業務操作,體驗就很好!!
是不是簡單的兩個例子,就能感受到好處了,其他什么局域網內下載上傳的就先不說了!
快速入門使用
這里先給上AndServer開源項目,以及作者的詳細介紹AndServer,一個Android端的web服務器,感謝作者的無私分享~~這里參考AndServer開發文檔更有幫助
1.Sample
開源項目內自帶了一實現用戶登錄的例子,通過表單請求服務器驗證用戶和密碼返回結果。
結合開發手冊可直接清晰明地了解其中的使用方法。
這里設備端也就是服務器的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文件。
如圖所示:
結果
流程很簡單,但是這個思路已經可以做很多事情了!