用AndServer做安卓手机服务器

吕奇
2023-12-01

AndServer官方文档地址

https://yanzhenjie.com/AndServer/

AndServer简介

AndServer是Android平台的Web Server和Web Framework。 它基于编译时注解提供了类似SpringMVC的注解和功能,如果您熟悉SpringMVC,则可以非常快速地掌握它。
AndServer是国人yanzhenjie开发部署在手机上的服务器框架
相关博客 https://blog.csdn.net/yanzhenjie1003

什么情况需要用?

个人感觉用手机做服务器比较low,一般都是用web做服务端,但难免会出现些特殊情况所以有这种框架还是挺方便便捷的,直接交代码吧
首先在安卓gradle里引入依赖包

dependencies {
    implementation 'com.yanzhenjie.andserver:api:{version}'
    annotationProcessor 'com.yanzhenjie.andserver:processor:{version}'
}

如果版本更新就看官方文档里的依赖 我写这篇博客时上面这个依赖是最新的
如果你会spring的话那么AndServer所谓开箱即用
下面我贴上接口代码
这是我做的一个接口代码

@RestController
public class UserController {
 @RequestMapping("/wlogin")
        public String login(@RequestParam("name") String name, @RequestParam("psw") String psw, HttpRequest request) {  //登陆接口
            List<Users> usersList = Users.find(Users.class, "name = ? AND password = ?",
                    name, psw);
            if (!usersList.isEmpty()){
                String callbackFuncation =  request.getParameter("callback");
                return callbackFuncation+"(1)"; //登录成功
            }
            else{
                String callbackFuncation =  request.getParameter("callback");
                return callbackFuncation+"(0)"; //登录失败
            }
        }
            }

如果是传输list数据就用需要用到alibaba的fastJSON来做数据传输

      @RequestMapping("/getUser")
    public String getUser(@RequestParam("name") String name, @RequestParam("psw") String psw, HttpRequest request)//获取个人用户信息
        {
            List<Users> usersList = Users.find(Users.class, "name = ? AND password = ?",
                    name, psw);
            if (!usersList.isEmpty()){
                String callbackFuncation =  request.getParameter("callback");
//                return callbackFuncation+"({'name':'"+usersList.get(0).getName()+",'birth':"+usersList.get(0).getBirth()+",'sex':"+usersList.get(0).getSex()+",'phone':"+usersList.get(0).getPhone()+"})"; //获取成功
           return callbackFuncation+"("+JSON.toJSON(usersList.get(0))+")";
            }
            else{
                String callbackFuncation =  request.getParameter("callback");
                return callbackFuncation+"(0)"; ///获取失败
            }
        }

这里我把依赖贴进来

 implementation 'com.alibaba:fastjson:1.1.70.android' //引入阿里巴巴的fastjson库
    implementation 'com.alibaba:fastjson:1.2.55'

弄好了之后安卓这边就算差不多了接下来我们看web 这边使用ajax请求到安卓端的数据

	function Userlogin(){
		var name=$('#exampleInputEmail1');
		var psw=$('#exampleInputPassword1');
		$.ajax({
		url:"http://10.22.12.1:8080/wlogin",
		type:"get",
		dataType:"jsonp",
		jsonp:"callback",
        jsonpCallback: 'handleResponse', //设置回调函数名
		timeout: 5000,
		data:{
			"name":name.val(),
			"psw":psw.val()
		},
		success:function(result){
			if(result=="1"){
				alert("登录成功");
				 localStorage.setItem('name',name.val());//存储key为name的数据data
				 localStorage.setItem('psw',psw.val());//存储key为name的数据data
				window.location.href="main.html";
			}else{
				alert("密码错误");
			}	
		},
		error:function(result){
			// var jsonData = JSON.stringify(result);// 转成JSON格式
				alert("服务器未开启");
		}
		});
	}
</script>

因为使用到跨域所以不用json 传输 使用的是jsonp来传输数据
还有其他关于跨域的我就暂时没写了可以自行百度
关于web和android传输数据的那个表头callback最好是要一致的不过我这里是用安卓使用了get到了再赋值给String
最后
在安卓端设置一个服务器用java获取到本机服务器地址
然后在url上面换成自己的地址就可以了

ServerManager.startServer()
NetWorkUtil.getHostIp()

使用getHostIp显示出服务器地址就可以看到了

开启服务器就OK啦

源码地址等会会贴出来

 类似资料: