I'll try anything once

人生苦短 何妨一试

Android模拟器无法访问本地Server解决

前言

昨天自己尝试着做了一个flask作为后端,Android作为前端的demo,仅仅实现了用户登录,但是整个的demo逻辑通了之后,Android一直无法访问后端,然后就开始了debug了3个小时,从晚上7点开始,实现整个逻辑共耗费了1个小时,然后debug了3个多小时,本次仅记录我的debug过程,希望为日后的自己提供一些借鉴之处。

正文

前端代码如下

  • 刚开始一直执行的是onFailure,根本没有访问到127.0.0.1:5000,然后加了断点,看了request的请求方式,发现是get请求,所以该回了post请求,虽然直觉告诉我主要问题不是这个,果然重新运行之后,执行的还是onFailure
  • 之后我想应该是网的问题,自己明明在Manifest中添加了<uses-permission android:name="android.permission.INTERNET"/>为什么还是不行,难道是网有问题,我就试了下访问百度,代码如下:

    发现是没有任何问题的,然后我就感觉应该是本地的地址问题,然后想到Android模拟器和电脑的本地地址是不是会有冲突,之后在stackoverflow解决了我的疑惑【reference第一个】,然后可能是智障了,没有读明白,把在后端的地址改成了10.0.2.2:5000,服务器端显示无法使用改地址,然后自己改成0.0.0.0:5000,还是失败,最后重新读了一遍,读明白之后,将Android端的请求URL改为10.0.2.2:5000,问题解决

问题原因

Android模拟器中,127.0.0.1是作为自己的loopback address的,所以相当于一直在自己访问自己,而对于Android模拟器来说10.0.2.2才是其寻找本地电脑的IP地址。
若是使用真机调试,要保证自己的电脑和手机在同一个局域网,若是挂在服务器,这些问题都可以忽略

Reference

java.net.ConnectException: localhost/127.0.0.1:8080 – Connection refused

OkHttp response status code in onFailure method

Android 8: Cleartext HTTP traffic not permitted
第一行代码第二版

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注