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

流程很简单,但是这个思路已经可以做很多事情了!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,000评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,825评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,055评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,766评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,639评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,453评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,860评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,492评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,783评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,817评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,624评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,439评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,872评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,075评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,372评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,868评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,075评论 2 338

推荐阅读更多精彩内容