Java.net.ConnectException: localhost/127.0.0.1:8080 - 连接被拒绝。

111

1
使用10.0.2.2回环到本地主机(127.0.0.1)。您可以在此处阅读更多信息Android模拟器网络 - Dmytro Melnychuk
10个回答

328

由于您没有指定是从设备或模拟器连接到服务器,所以我猜您正在使用模拟器运行应用程序。

如果您是在Android模拟器上引用系统中的localhost,则必须使用 http://10.0.2.2:8080/。因为Android模拟器运行在虚拟机中,所以这里的127.0.0.1localhost将是模拟器自己的环回地址。

参考: 模拟器网络


是的,我正在做同样的事情。您能详细解释一下吗?在哪里更改IP地址为10.0.2.2?这是我正在尝试从XAMPP服务器访问的文件夹http://localhost:8080/aero/。 - pradeep
1
我明白了,我们需要更改应用程序中给定的路径,例如将 http://http://localhost:8080/link/to/resource.xml 更改为 http://http://10.0.2.2:8080/link/to/resource.xml。 - pradeep
@VikasPatidar,您能告诉我在我的代码中将此地址更改为10.0.2.2的位置吗?因为我是新手。 - AndroidOptimist
1
如果你的URL类似于http://localhost:8080/Getdata.php或者http://127.0.0.1:8080/Getdata.php,那么你需要将它改为使用http://10.0.2.2:8080/Getdata.php - Vikas Patidar
1
如果您正在使用Genymotion,请将10.0.2.2替换为10.0.3.2 - Jacob R
显示剩余6条评论

32

在Android中

替换:String webServiceUrl = "http://localhost:8080/Service1.asmx"

使用:String webServiceUrl = "http://10.0.2.2:8080/Service1.asmx"

祝你好运!


2
在哪个文件中? - Ankita Singh
你的基本URL可能在常量类或Retrofit类中。 - Pravin Desai
1
@PravinDesai,你可以在gradle中添加BaseURL。https://dev59.com/rbPma4cB1Zd3GeqPjwbj#55518959 - PhuocLuong
@PhuocLuong 谢谢,我不知道那也是可能的。 - Pravin Desai

22

“localhost”和“127.0.0.1”都表示“当前计算机”的意思。所以,在你的PC上,“localhost”就是指该PC本身,而在Android手机上,“localhost”就是指该手机本身。因为你的手机没有运行Web服务器,所以它会拒绝连接。

你需要获取计算机的IP地址(在Windows上使用ipconfig查找),并使用该IP地址代替127.0.0.1。但这可能仍无法正常工作,这取决于你的网络/防火墙设置,但这是完全不同的话题。


你能详细解释一下吗?我需要更改我的机器IP地址吗? - pradeep
2
如果您键入ipconfig,它将告诉您机器的IP地址。这很可能是您网络的私有IP地址,因此只能从在同一网络上的设备访问,所以WIFI可能有效,3G可能无效。 - skorulis
@skorulis 是的,我们需要设置我们机器的URL,这个URL不同于127.0.0.1,因为我们在应用程序代码中连接到网络。 - Ravi Yadav
您还可以为运行服务器的计算机设置特定的IP地址。在您的Android应用程序中使用此IP地址更好,因为如果您重新启动路由器或计算机,则计算机通常会获得新的IP地址,您将不得不在代码中进行更改。 - DOUBL3P

13

9

您只需要使用本地(但实际的)IP地址和端口号,像这样:

String webServiceUrl = "http://192.168.X.X:your_virtual_server_port/your_service.php"

并确保在清单文件中设置了互联网权限

<uses-permission android:name="android.permission.INTERNET" />


5

4

3

对我来说它是有效的。 我使用Genymotion运行应用程序。

1.首先,我检查了我的本地IP。 转到命令模式>> 然后写入ipconfig。 例如:Windows 10>>搜索cmd>>然后写入ipconfig。 2.然后获取您的本地IP信息>>> 3. 使用给出的本地主机IP和虚拟盒子IP。 您需要使用虚拟盒子IP进行Genymotion。 请参阅下面的屏幕截图。 您可以在虚拟盒主机网络下使用以下任何IP enter image description here


2

将 localhost 替换为 10.0.2.2 是正确的,但您也可以将 localhost 替换为您物理机器的 IP(这样更好用于调试目的)。

当然,如果 IP 是由 DHCP 提供的,则每次都需要更改...

祝你好运!


0

解决方法非常简单。

1 在 Androidmanifest.xml 文件中添加网络权限。

<uses-permission android:name="android.permission.INTERNET" />

[2] 修改你的httpd.config文件

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

TO

Order Deny,Allow
Allow from all
Allow from 127.0.0.1

And restart your server.

[3] 最重要的一步。 将您的网络设置为家庭网络 进入控制面板 > 网络和互联网 > 网络和共享中心。
Click on your Network and select HOME NETWORK

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接