2025年3月29日 星期六 甲辰(龙)年 月廿八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

AndServer配置

时间:02-08来源:作者:点击数:42

AndServer的Github地址:https://github.com/yanzhenjie/AndServer,文档地址:https://yanzhenjie.com/AndServer/

  1. 在项目build.gradledependencies中添加一个插件,如下:
    • buildscript {
    • repositories {
    • google()
    • mavenCentral()
    • }
    • dependencies {
    • 。。。
    • classpath 'com.yanzhenjie.andserver:plugin:2.1.9' // AndServer
    • }
    • }
  2. 在模块的build.gradle中应用AndServer插件和kapt插件,如下:
    • plugins {
    • id 'com.android.application'
    • id 'kotlin-android'
    • id 'kotlin-kapt'
    • id 'com.yanzhenjie.andserver' // AndServer
    • }
  3. 在模块的build.gradle中添加AndServer相关依赖,如下:
    • dependencies {
    • 。。。
    • // AndServer
    • implementation 'javax.activation:javax.activation-api:1.2.0'
    • implementation 'com.yanzhenjie.andserver:api:2.1.9'
    • kapt 'com.yanzhenjie.andserver:processor:2.1.9'
    • }

    注:这里的activation-api依赖在AndServer官网中并没有添加,因为官网的使用环境是jdk1.8,当我们的项目使用jdk11的时候,在processor库中的com.yanzhenjie.andserver.processor.ControllerProcessor类里面用到了javax.activation.MimeTypeParseException类,这个类在JDK1.8中是存在的,而在JDK11的时候就被删除掉了,在编译的时候会报如下警告:

    Task :app:kaptDebugKotlin

    [WARN] Can’t find annotation processor class com.yanzhenjie.andserver.processor.ControllerProcessor: javax/activation/MimeTypeParseException

    编译报了这个警告,但程序可以正常运行,只是在客户端请求接口时就请求不到了,比如访问:http://192.168.1.75:8899/user/login接口,这个接口我们是已经做好了的,但是会提示找不到这个接口,如下:

    The resource [/user/login] is not found.

    所以,当我们使用JDK11或更高的JDK版本时,需要添加activation-api依赖。

  4. 相关实现类

    • import android.util.Log
    • import com.yanzhenjie.andserver.AndServer
    • import com.yanzhenjie.andserver.Server
    • import java.lang.Exception
    • import java.util.concurrent.TimeUnit
    • object AndServerEngine {
    • private var mAndServer: Server? = null
    • fun startup() {
    • if (mAndServer?.isRunning == true) {
    • Log.i("ABCD", "AndServer已经启动")
    • return
    • }
    • AndServer
    • .webServer(App.sContext)
    • .port(8899)
    • .timeout(10, TimeUnit.SECONDS)
    • .listener(object : Server.ServerListener {
    • override fun onStarted() {
    • Log.i("ABCD", "AndServer启动成功")
    • }
    • override fun onStopped() {
    • Log.i("ABCD", "AndServer关闭成功")
    • }
    • override fun onException(e: Exception?) {
    • Log.i("ABCD", "AndServer出现异常", e)
    • }
    • })
    • .build()
    • .apply {
    • mAndServer = this
    • startup()
    • }
    • }
    • fun shutdown() {
    • val server = mAndServer
    • if (server?.isRunning == true) {
    • server.shutdown()
    • mAndServer = null
    • } else {
    • Log.i("ABCD", "AndServer没有启动")
    • }
    • }
    • }
    • import android.util.Log
    • import com.yanzhenjie.andserver.annotation.RestController
    • import com.yanzhenjie.andserver.annotation.RequestMapping
    • import com.yanzhenjie.andserver.annotation.GetMapping
    • import com.yanzhenjie.andserver.annotation.QueryParam
    • @RestController
    • @RequestMapping(path = ["/user"])
    • class UserController {
    • @GetMapping("/login")
    • fun login(@QueryParam("account") account: String?, @QueryParam("password") password: String?): String {
    • Log.i("ABCD", "收到登录请求,account = $account,password = $password")
    • return "Successful!"
    • }
    • }
    这里,我们通过AndServerEngine来控制AndServer的启动关闭,通过UserController来定义相关的请求接口,这里有一个需要注意的细节是,Get请求的参数注解是QueryParam,而Post请求的参数注解是RequestParam
    然后我们在主界面添加两个按钮,如下:
    在这里插入图片描述
    然后设置一下点击事件:
    • class MainActivity : AppCompatActivity() {
    • override fun onCreate(savedInstanceState: Bundle?) {
    • super.onCreate(savedInstanceState)
    • setContentView(R.layout.activity_main)
    • findViewById<Button>(R.id.startBtn).setOnClickListener { AndServerEngine.startup() }
    • findViewById<Button>(R.id.stopBtn).setOnClickListener { AndServerEngine.shutdown() }
    • }
    • }

    最后,不要忘了在清单文件中设置一下网络权限,如下:

    • <uses-permission android:name="android.permission.INTERNET"/>
  5. 找台电脑,要和手机在相同的局域网中,然后在浏览器上访问:
    • http://192.168.1.75:8899/user/login?account=ZhangShan&password=123456
    效果如下:
    在这里插入图片描述
    完整代码:https://gitee.com/daizhufei/and-server-demo
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门