• 【Android】在AVD虚拟机中访问宿主机上运行的服务器:使用特殊IP地址10.0.2.2


    问题描述

    当我们向后端程序发送请求时,使用127.0.0.1无法访问到后端API接口

    这篇文章将解释为什么在Android模拟器中无法使用127.0.0.1,并介绍如何解决这个问题。


    原因分析

    在Android模拟器或虚拟机中,127.0.0.1指向的是虚拟机自身,而不是宿主机。因此,当我们尝试使用127.0.0.1访问宿主机上运行的服务器时,请求实际上是发送到了虚拟机自身,而不是宿主机。

    为了解决这个问题,Android模拟器提供了一个特殊的IP地址:10.0.2.2。这个IP地址被映射到宿主机的回环接口,可以用来访问宿主机上运行的服务器。


    解决方案

    如果你在模拟器中运行一个应用程序,并且需要访问宿主机上的服务器,可以将服务器的地址设置为10.0.2.2:port,其中port是服务器的端口号。

    例如,在Retrofit中,我们可以把baseUrl设置为10.0.2.2

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://10.0.2.2:8080/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
    
    • 1
    • 2
    • 3
    • 4

    在上面的示例中,我们将服务器的地址设置为10.0.2.2:8080,并发送请求到该地址。

    通过使用10.0.2.2,我们可以成功访问宿主机上运行的服务器,并与后端API进行通信。


    注意事项

    10.0.2.2只在模拟器或虚拟机中有效,在真实的设备上是无法使用的。因此,在真实设备上进行开发和测试时,应该使用真实的IP地址或域名来访问服务器。


    总结

    当在Android模拟器中无法使用127.0.0.1访问宿主机上的服务器时,可以使用10.0.2.2来解决这个问题。希望这篇文章能帮助你解决这个常见的开发问题!

  • 相关阅读:
    使用OpenAPI提升网关安全的开源软件,诚邀小伙伴参与
    Python字符串详解(包含长字符串和原始字符串)
    【C++修炼之路】9. string类的模拟实现
    CSS介绍
    Excel快速定位sheet
    什么是微服务架构?解释微服务的优点和挑战
    记录:Unity脚本的编写
    java之TextIO库
    电能计量远程抄表系统的分析及在物业的应用
    qt5.14.2+VS源码调试记录
  • 原文地址:https://blog.csdn.net/qq_34988204/article/details/134461619