uni-app 安卓端uni.request无法触发 BUG反馈

uni-app 安卓端uni.request无法触发 BUG反馈

开发环境 版本号 项目创建方式
Windows 6.1 7601 SP1 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.3.4

手机系统:Android

手机系统版本号:Android 12

手机厂商:安卓模拟器

手机机型:无

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

示例代码:
```javascript
onLoad() {  
    //WSS在安卓端发送请求是正常的  
    uni.onSocketMessage(function (res){console.log('收到服务器内容OK:' + res.data);});  
    uni.sendSocketMessage({  
        data:this.objToStr  
    });  
    //安卓端uni.request 无法触发,console.log会触发 用雷电模拟器,使用方式”自定义调试基座“,应该能复现  
    console.log('开始执行')  
    uni.request ({  
        method:'POST',  
        url:"url",  
        data:this.cesj,  
        success: (res) => {  
            this.hhshs = res.data  
            console.log('测试成功')  
            console.log(res)  
        }  
    })  
    console.log('执行完毕')  
},
操作步骤:
```javascript
onLoad() {  
    //WSS在安卓端发送请求是正常的   
    uni.onSocketMessage(function (res){console.log('收到服务器内容OK:' + res.data);});  
    uni.sendSocketMessage({  
        data:this.objToStr  
    });  
    //安卓端uni.request 无法触发,console.log会触发,用雷电模拟器,使用方式”自定义调试基座“,应该能复现,发送内容可随意,服务器都有返回值的  
    console.log('开始执行')  
    uni.request ({  
        method:'POST',  
        url:"url",  
        data:this.cesj,  
        success: (res) => {  
            this.hhshs = res.data  
            console.log('测试成功')  
            console.log(res)  
        }  
    })  
    console.log('执行完毕')  
},
预期结果:
console.log会打印出来,返回登入成功、失败的RES

实际结果:
只返回console.log的内容
bug描述:
安卓端uni.request 无法触发

1. 小程序uni.request是完成没问题的。逻辑方面应该没问题。
2. 使用https请求我服务器的图片是没问题的。https应该没什么问题。
3. 安卓端console.log,uni.connectSocket 执行正常,页面渲染没有问题。很可能只是uni.request有问题。
4. 安卓端uni.reques在安卓端,应该是没有触发,我服务器根本没有收到https请求,我服务器也应该没问题,因为其他请求都正常。
5. 我是手机模拟器测试的,雷电模拟器,测试方式是”自定义调试基座“。
6. 我把WSS代码删除了,uni.request也无法触发。
7. 如果无法复现,可以联系我

更多关于uni-app 安卓端uni.request无法触发 BUG反馈的实战教程也可以访问 https://www.itying.com/category-93-b0.html

30 回复

啥玩意啊,uni.request 是异步的啊 肯定会走到console.log(‘执行完毕’) ,能不能好好学学js在写代码! uni.request 你放一个fail 看看哪里出错了都不会???

更多关于uni-app 安卓端uni.request无法触发 BUG反馈的实战教程也可以访问 https://www.itying.com/category-93-b0.html


您怎么知道我没试用过异步,是您没试过异步吧。异步也是不行的

这个是BUG,已经很明显了。其他测试结果我没写而已。这几行代码,只是新建的项目,专门测试用的。

https://ask.dcloud.net.cn/question/135487 跟我的问题有点像,你能稳定复现?

自己想办法开发原生插件

如果是有必要是考虑用原生插件,不过uni.request比较方便吧

您可以试一下WSS方式,WSS方式是没问题的,反正这个问题不大。

您帖子我在发帖前,已经看过了

回复 1***@qq.com: 是呀,只是老有客户出现,我自己并没有办法稳定复现

看下失败信息是什么。提供下完整测试demo

应该不需要完整代码就能复现,就是uni.request没反应,同步异步都没反应,不触发,怎么试都不触发。没有失败信息,异步的RES是undefined

您告诉我怎么样能成功触发就行了

回复 DCloud_Android_ST: 抱歉,第一次发帖,您是管理员吧,我把代码上传到附件,应该就可以了吧。

回复 DCloud_Android_ST: 我这边自己测试下吧,换个模型器,然后把代码整理下,再上传

能推荐一款,安卓模拟器吗

已经把测试项目、打包好的APP发送到附件,麻烦您看下,问题在哪,我换逍遥游模拟器还是有问题。

回复 1***@qq.com: 真机测试还会吗?

回复 小七ing: 我主要是报个BUG,没去真机测,模拟器也是要能用的。uni.request,同步异步都能是要能用的

回复 小七ing: 这问题对你项目,应该没影响吧

回复 1***@qq.com: 我也是有客户提示,没有执行uni.request,没有走success和fail,所以持续关注下你

回复 1***@qq.com: 没看到项目附件

回复 DCloud_Android_ST: 我已经排查到原因了,目前还在测试。可以算BUG吧。

回复 小七ing: 我找原因了,还在测试。和证书有点关系

回复 小七ing: 这个不算BUG,也算坑了

回复 DCloud_Android_ST: 我已经自己解决这个问题了,是证书问题。uni.request 会检查证书,但是WSS那个又不会检查证书。结果一开始我以为证书没问题

回复 小七ing: 我已经解决问题了,证书问题,你可以不检查证书

回复 DCloud_Android_ST: 这真是个坑,小程序又一点问题没,APP独有问题

回复 1***@qq.com: 好的,大部分客户是可以,一个半个不行,郁闷

我也遇见了这个问题,内置浏览器没问题,运行到手机就不生效,昨天没问题的,今早离线打包也可以。

根据你提供的信息,这个问题很可能是由以下原因导致的:

  1. 网络权限配置问题:检查 manifest.json 中是否配置了网络请求权限。在 App模块配置 中确保 网络请求(uni.request) 已勾选,并在 源码视图 中确认 Android 权限包含:
"android": {
  "permissions": [
    "<uses-permission android:name=\"android.permission.INTERNET\"/>"
  ]
}
  1. HTTPS 证书问题:Android 对 HTTPS 证书要求更严格。如果服务器证书无效或自签名,可能导致请求被拦截。尝试在 manifest.json 中配置:
"app-plus": {
  "ssl": {
    "verify": false
  }
}
  1. 请求 URL 格式问题:确保 URL 是完整的 HTTPS 地址(Android 强制要求 HTTPS)。检查 URL 是否包含协议头,避免使用 localhost127.0.0.1

  2. 模拟器网络限制:雷电模拟器可能存在网络隔离。尝试:

    • 使用真机调试
    • 在模拟器中访问网页测试网络连通性
    • 更换其他模拟器(如夜神)
  3. 请求超时设置:添加 timeout 参数测试:

uni.request({
  timeout: 10000,
  // ...其他参数
})
  1. 错误回调监控:补充完整的回调处理:
uni.request({
  // ...参数
  success: (res) => { console.log('success:', res) },
  fail: (err) => { console.log('fail:', err) },
  complete: (res) => { console.log('complete:', res) }
})
回到顶部