我按照Google的教程创建了一个Android客户端,使用云端点向应用引擎后端发布简单注释,如下所示:
https://developers.google.com/eclipse/docs/endpoints-create-fromandroid
我运行本地服务器,然后是Android客户端应用程序,所有似乎都运行良好。没有报告错误。但是当我使用curl或API资源管理器列出笔记时,它会返回一个空集。
我确保禁用我的病毒扫描程序并关闭防火墙。没运气。我在手机上运行Android客户端(连接到我的wifi网络),如果这有所不同。我永远无法让模拟器工作,它只是永远挂在启动屏幕上,所以我总是使用我的手机。
根据Google的说明,插入代码作为AsyncTask执行:
public class EndpointsTask extends AsyncTask<Context, Integer, Long> {
protected Long doInBackground(Context... contexts) {
Noteendpoint.Builder endpointBuilder = new Noteendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),
new HttpRequestInitializer() {
public void initialize(HttpRequest httpRequest) { }
});
Noteendpoint endpoint = CloudEndpointUtils.updateBuilder(
endpointBuilder).build();
try {
Note note = new Note().setDescription("Note Description");
String noteID = new Date().toString();
note.setId(noteID);
note.setEmailAddress("E-Mail Address");
Log.e("Debug", "Inserting note...");
Note result = endpoint.insertNote(note).execute();
Log.e("Debug", "Done inserting note!");
} catch (IOException e) {
e.printStackTrace();
}
return (long) 0;
}
}
有趣的是“完成插入笔记!”从不打印。我将进一步的调试放入insertNote函数本身,它使它一直到return语句。不确定它有可能不会返回?
有关如何解决此问题的任何建议?感谢。
答案 0 :(得分:1)
您是否在本地服务器上禁用了https?我认为这个协议在带端点的开发模式下不起作用。
答案 1 :(得分:1)
听起来它永远不会连接。你有没有看到堆栈跟踪,我有点惊讶。您是否有可能从LogCat中过滤堆栈跟踪而没有看到它?
为了通过wifi连接到本地服务器,您需要设置两件事(假设防火墙已禁用)。
使用Eclipse生成的示例代码。在DeviceInfoEndpoint类中,您需要为注释@Api定义属性,您需要将&lt; server ip&gt; 设置为服务器ip。我的端口由Eclipse设置为8888。
@Api(root = "http://<server ip>:8888/_ah/api", name = "deviceinfoendpoint", namespace = @ApiNamespace(ownerDomain = "gcetest.com", ownerName = "gcetest.com", packagePath = ""))
public class DeviceInfoEndpoint {
如下文所述,您需要将地址选项设置为0.0.0.0(-a是--address选项的快捷方式)
-a 0.0.0.0
请参阅devserver https://developers.google.com/appengine/docs/java/tools/devserver?csw=1
的文档- 地址= ... 用于服务器的主机地址。您可能需要将其设置为能够从网络上的另一台计算机访问&gt;开发服务器。地址0.0.0.0允许&gt; localhost访问和主机名访问。默认为localhost。
这可以在Eclipse中通过
完成看起来应该是这样的
- port = 8888 -a 0.0.0.0
我认为这应该可以解决你的问题。