从客户端应用程序插入的Google Cloud Endpoint不在本地服务器上运行

时间:2014-01-17 16:51:28

标签: android google-app-engine google-cloud-endpoints

我按照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语句。不确定它有可能不会返回?

有关如何解决此问题的任何建议?感谢。

2 个答案:

答案 0 :(得分:1)

您是否在本地服务器上禁用了https?我认为这个协议在带端点的开发模式下不起作用。

答案 1 :(得分:1)

听起来它永远不会连接。你有没有看到堆栈跟踪,我有点惊讶。您是否有可能从LogCat中过滤堆栈跟踪而没有看到它?

为了通过wifi连接到本地服务器,您需要设置两件事(假设防火墙已禁用)。

  1. 使用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 {
    
  2. 如下文所述,您需要将地址选项设置为0.0.0.0(-a是--address选项的快捷方式)

  3. -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”

    看起来应该是这样的

    - port = 8888 -a 0.0.0.0

    • 启动服务器
    • 重新生成客户端应用的端点
    • 重新部署客户端应用

    我认为这应该可以解决你的问题。