我一直在关注Creating an Endpoints Backend from an Android Project中的教程。一切都在编译,看起来很有希望。后端已启动,我将CloudEndpointUtils#LOCAL_ANDROID_RUN更改为“true”。但是当我尝试在真实设备(而不是模拟器)上测试应用程序时,我失败了 -
java.net.SocketException:20000ms后无法连接到/10.0.2.2(端口8888):isConnected失败:EHOSTUNREACH(无主机路由)
所以我查看了CloudEndpointUtils并看到将LOCAL_ANDROID_RUN设置为'true'会使应用程序在 http://10.0.2.2:8888
中查找DevAppServer,这是模拟器虚拟路由器。
但我不使用模拟器。所以我试图改变持有这个网址的常量 http://127.0.0.1:8888/
,但仍然没有运气。我现在失败了 -
java.net.ConnectException:20000ms后无法连接到/127.0.0.1(端口8888):isConnected失败:ECONNREFUSED(拒绝连接)
我认为这可能是因为我的PC在防火墙后面,所以我禁用了它,但仍然没有。
任何建议都将不胜感激。
答案 0 :(得分:12)
如果您想在Android Studio中执行此操作,请在build.gradle中按如下方式设置httpAddress
appengine {
...
httpAddress = "0.0.0.0"
}
答案 1 :(得分:7)
完成此任务
2.(继续)转到Arugments - >添加完全像这样
- 地址= 0.0.0.0 --port = .......
*获取您的IP地址,转到cmd - > ipconfig - >在步骤1中添加(带端口号的IPV4地址)
重要提示:如果您从加密狗或某些动态IP互联网服务访问互联网,请每次更改
谢谢......这完美无缺
答案 2 :(得分:5)
这里有很多答案,但我发现它们凌乱或不完整。要在计算机上运行本地服务器并使用真实设备对其进行测试,请执行以下操作:
1)将httpAddress = "0.0.0.0"
添加到后端(Google Cloud Endpoint)模块的appengine
文件中的build.gradle
块,如下所示:
appengine {
...
httpAddress = "0.0.0.0"
}
根据对问题的评论,这意味着“将从任何地方接受”。
2)在本地运行后端模块(即启动Web服务器)。这很简单:在下拉菜单中选择后端配置,然后按绿色按钮。你可以find more detailed instructions here。
您现在应该可以打开浏览器(在您的计算机上)并导航到http://localhost:8080/
并查看包含“Hello,Endpoints!”的网页和许多其他的东西。
3)找到您计算机的IP地址(在Mac上转至系统偏好设置 - >网络),然后将其设置为Android应用代码中的根网址,如下所示:
MyApi.Builder builder = new MyApi.Builder(
AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(),
null
).setRootUrl("http://192.168.1.36:8080/_ah/api/")
这就是全部!
答案 3 :(得分:1)
从无本地主机地址本地测试Google云端点时--address =" 0.0.0.0"设置可能还不够。
从非localhost访问时,我的端点发出404 Not Found错误。我通过在API decoration中包含 path 参数解决了这个问题。
我的API注释看起来像这样:
@ApiMethod(name="saveResponse", httpMethod = "post", path="saveResponse)
public Response saveResponse(@Named("answerString") String responseString)
答案 4 :(得分:0)
添加
--address="0.0.0.0"
作为app引擎服务器地址参数 接受所有传入的连接。
答案 5 :(得分:0)
按照用户248187的2. point post 2.(继续)转到Arugments - >添加完全像这样 --address = 0.0.0.0 --port = .......
现在,在客户端Android代码上,您需要将服务的请求IP(RootURL)更改为本地IP。您可以使用builder.setRootUrl()来实现。你在android客户端上为outomatice添加一个单位是好的,然后它可以快速在本地和部署的app-engiene之间切换。如:
//........................
private boolean mFlatLocalHostServer=true;
private static final String LOCAL_IP = "192.168.1.11"; //Ip debug server
public static final String LOCAL_SERVER_IP = "http://"+LOCAL_IP+":8888/_ah/api";
//......................
Mydataendpoint.Builder builder = new Mydataendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new GsonFactory(),
mCredential);
//request the service to local ip
if(mFlatLocalHostServer){
builder.setRootUrl(LOCAL_SERVER_IP);
}
Mydataendpoint service = builder.build();
response=service.insertMyData(mydata).execute();
答案 6 :(得分:-2)
地址 10.0.2.2 用于使用模拟器访问localhost,使用真实设备访问localhost,请使用以下步骤
- 打开你的命令行(cmd)运行ipconfig。 - 获取计算机的ipaddress并用它替换 10.0.2.2 , - 在您的设备上建立并运行。
希望这有助于某人