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

使用Volley无法连接HTTP站点(Android/Kotlin,HTTPS正常)

问题分析与解决方案

核心原因

你遇到的问题确实和HTTP/HTTPS的差异有关:Android 9(API级别28)及以上版本默认禁止明文HTTP网络请求,仅允许HTTPS协议的请求。你的Pico设备和测试的Columbia站点都使用HTTP,因此被系统拦截;而Google站点是HTTPS协议,所以能正常请求。

快速解决方法(测试环境)

如果只是开发测试阶段,最简单的方式是在AndroidManifest.xml的<application>标签中添加全局允许明文请求的配置:

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

注意:该配置存在安全风险,不建议在正式发布的App中使用。

更安全的解决方案(推荐)

针对特定的本地IP或域名单独允许明文请求,需要配置网络安全策略:

  1. 在res/xml目录下创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <!-- 允许你的Pico本地IP的明文请求 -->
        <domain includeSubdomains="true">192.168.0.201</domain>
        <!-- 若需测试其他HTTP站点,可添加对应域名 -->
        <domain includeSubdomains="true">columbia.edu</domain>
    </domain-config>
</network-security-config>
  1. 在AndroidManifest.xml的<application>标签中引用该配置:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

优化错误排查

当前代码的错误回调仅打印固定信息,建议修改为输出具体错误详情,方便定位问题:

val stringRequest = StringRequest(Request.Method.GET, url,
    { response ->
        println(url)
        println("response:")
        println(response)
        println("end of response")
    },
    { error ->
        println("that didn't work")
        println(url)
        // 打印错误状态码和消息
        println("Error code: ${error.networkResponse?.statusCode ?: "Unknown"}")
        println("Error message: ${error.message ?: "No message"}")
    })

其他控制LED灯带的方案

除了HTTP接口,还可以考虑以下更适合物联网场景的方式:

  • MQTT协议:Pico作为MQTT客户端,Android App通过MQTT Broker发送控制指令,延迟更低,适合批量设备管理。
  • WebSocket:建立长连接实现实时双向通信,适合需要即时响应的控制场景。
  • 蓝牙BLE:给Pico添加蓝牙模块,通过蓝牙直接通信,无需依赖WiFi网络。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:55:14