我正在尝试使用Android上的Retrofit连接到localhost:3000/full
。
public class RestManager {
private QaraSozService qaraSozService;
public QaraSozService getQaraSozService() {
if (qaraSozService == null) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:3000")
.addConverterFactory(GsonConverterFactory.create())
.build();
qaraSozService = retrofit.create(QaraSozService.class);
}
return qaraSozService;
}
}
public interface QaraSozService {
@GET("/full")
Call<List<QaraSoz>> getAllQaraSoz();
}
但是当我尝试连接时出现onFailure,我得到了错误消息,我得到了Failed to connect to localhost/127.0.0.1:3000
为什么android尝试连接到localhost/127.0.0.1:3000
而不是localhost:3000?
答案 0 :(得分:0)
您的API服务器在台式机/笔记本电脑上运行,如果您尝试从移动设备连接到此api,则应在baseUrl而不是localhost中设置台式机/笔记本电脑的ip(类似:baseUrl("http://192.168.0.1:3000")
)< / p>
请确保您的服务器和移动设备在同一局域网中。
或者,如果您使用android模拟器而不是真实设备,则应使用ip 10.0.2.2。此处更多信息:https://developer.android.com/studio/run/emulator-networking
10.0.2.2主机回送接口的特殊别名(即开发计算机上的127.0.0.1)
答案 1 :(得分:0)
我看到它是Ubuntu,请执行以下步骤: -从终端类型>> ifconfig 这将打印出您的机器wlan IP地址 您将使用此ip而不是127.0.0.1来访问您的IP -您可以通过输入wlanip:3000进行测试,它应该等效于localhost:3000。 -如果您遇到问题,则可能需要从终端>> sudo ufw disable禁用Ubuntu防火墙 -确保将Android设备和Ubuntu计算机连接到同一网络,然后将Android代码中的127.0.0.1替换为从ifconfig命令获得的代码,然后测试您的应用程序