You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实体Android设备对接本地SpringBoot服务器REST API遇TimeoutError求助

解决实体Android设备连接本地SpringBoot后端的TimeoutError问题

问题背景

同时开发Android Studio前端与SpringBoot后端,SpringBoot以localhost运行,实体智能手机运行前端时调用REST API出现com.android.volley.TimeoutError,无法连接本地服务器,当前使用的IP为192.168.56.1(Windows ipconfig获取),需实现本地服务器与实体设备的正常对接。

核心错误分析

TimeoutError本质是网络链路不通,常见原因包括:

  • 错误的局域网IP(192.168.56.1多为虚拟机虚拟网卡IP,并非电脑实际局域网IP)
  • 手机与电脑不在同一WiFi局域网
  • SpringBoot仅监听localhost,未开放外部访问
  • 电脑防火墙拦截8080端口
  • Android版本限制明文HTTP请求
  • GET请求携带JSON请求体的错误用法(GET不支持请求体,后端无法接收参数)

分步解决方案

1. 获取正确的电脑局域网IP

打开Windows终端执行ipconfig,找到当前联网的网卡(无线局域网适配器WLAN/以太网适配器以太网)对应的IPv4地址,比如192.168.1.105,这个才是手机能访问的有效IP。

2. 确保设备同局域网

将手机连接到与电脑同一WiFi网络,禁止使用手机移动数据。

3. 配置SpringBoot允许外部访问

在application.properties中添加:

server.address=0.0.0.0
server.port=8080

0.0.0.0表示监听所有可用网卡,确保外部设备能访问后端服务。

4. 关闭或配置防火墙

  • 临时关闭Windows防火墙测试是否能连接
  • 若需保留防火墙,添加入站规则,允许8080端口的TCP连接

5. 解决Android明文HTTP限制

Android 9(API 28)及以上默认禁止明文HTTP请求,需做如下配置:

  • 在AndroidManifest.xml的<application>标签中添加:
    android:usesCleartextTraffic="true"
    
  • 若targetSdkVersion ≥30,还需创建res/xml/network_security_config.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">你的局域网IP</domain>
        </domain-config>
    </network-security-config>
    
    然后在<application>标签引用:
    android:networkSecurityConfig="@xml/network_security_config"
    

6. 修正Volley请求的错误用法

你的代码中使用GET请求携带JSON请求体,这不符合HTTP规范,后端无法接收参数,需二选一修改:

方案一:改用POST请求(推荐)

将请求方法改为POST,后端用@RequestBody接收JSON参数:

// 修改请求方法为POST
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, jsonRequest, 
    new Response.Listener<JSONObject>() {
        // 原有响应逻辑不变
    }, 
    new Response.ErrorListener() {
        // 原有错误逻辑不变
    }
);

方案二:用GET拼接参数

将email参数拼接到URL中,去掉JSON请求体:

// 拼接参数并编码
String email = URLEncoder.encode(editText_email.getText().toString(), "UTF-8");
String url = "http://正确局域网IP:8080/user/check-email?email=" + email;

// GET请求时jsonRequest传null
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, 
    new Response.Listener<JSONObject>() {
        // 原有响应逻辑不变
    }, 
    new Response.ErrorListener() {
        // 原有错误逻辑不变
    }
);

验证步骤

  1. 启动SpringBoot后端,确保日志显示Started Application in X seconds (JVM running for X)
  2. 用手机浏览器访问http://正确局域网IP:8080/user/check-email?email=test@example.com,检查是否能返回正常JSON响应
  3. 重新运行Android应用,测试接口调用

内容的提问来源于stack exchange,提问作者minyeong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:22:09