Android模拟器连接localhost失败:java.net.ConnectException报错求助
解决Android模拟器连接localhost失败的问题
问题根源
Android模拟器中的127.0.0.1指向模拟器自身的回环地址,而非运行后端服务的主机,因此无法连接到电脑上的本地服务。
解决方案
1. 替换为模拟器专属主机地址
把代码里的http://127.0.0.1:3000换成http://10.0.2.2:3000——这是Android Studio自带模拟器专门用于访问主机localhost的地址。修改后的代码示例:
private fun call() { val retrofit = Retrofit.Builder() .baseUrl("http://10.0.2.2:3000") // 替换为模拟器专属地址 .addConverterFactory(GsonConverterFactory.create()) .build() val apiService = retrofit.create(ApiService::class.java) val call = apiService.login() call.enqueue(object : Callback<String>{ override fun onResponse(call: Call<String>, response: Response<String>) { Log.i("api_test", "onSuccess: ${response.body()}") } override fun onFailure(call: Call<String>, t: Throwable) { Log.i("api_test", "onFailure: $t") } }) }
2. 确保后端服务允许外部访问
检查你的后端服务是否仅监听127.0.0.1,如果是,需修改为监听0.0.0.0,这样模拟器才能访问到服务。比如Node.js服务的修改示例:
app.listen(3000, '0.0.0.0', () => { console.log("服务运行在http://0.0.0.0:3000") })
3. 确认APP拥有网络权限
在AndroidManifest.xml中添加网络权限,否则APP无法发起网络请求:
<uses-permission android:name="android.permission.INTERNET" />
4. 其他模拟器适配
如果用的是Genymotion模拟器,需把地址换成10.0.3.2;如果是物理设备,直接使用电脑的局域网IP地址即可。
内容的提问来源于stack exchange,提问作者Selmen Bouazra
相关产品推荐
相关产品推荐

