【问题标题】:Google App Engine ApiMethod with parameters doesn't work带参数的 Google App Engine ApiMethod 不起作用
【发布时间】:2013-01-25 16:27:00
【问题描述】:

到目前为止,我能够在 Google 中找到所有问题的答案,但这次我放弃并创建了一个帐户...

我开始在 Eclipse 中使用 GAE for Android 应用程序,我正在编写一个 API,当然还有 ApiMethods。
我写的其中一个方法有一个返回值,但在客户端代码中它似乎是无效的。
这是我正在尝试生成的非常有用的方法:

@ApiMethod(name = "weather.bla")
public double Bla(double d)
{
    return 2.5;
}

如您所见,此方法获取一个双精度变量作为参数并返回一个双精度变量,但在客户端代码上,它似乎不承认这些双精度变量。(它自动完成到 weather()。 bla() 和 .execute() 方法是 Void)
我什至尝试编辑生成的代码并在必要的地方添加双打,但是当我尝试运行应用程序时,它有点爆炸,没有“强制关闭”警报,没有警告,应用程序就消失了。

更奇怪的是,我在 GAE 代码上有一个名为“Weather”的类,而使用 Wea​​ther 类的 ApiMethods 可以完美生成。

我在这里缺少一些基本的东西吗?

【问题讨论】:

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


    【解决方案1】:

    您应该传递 Java Beans 作为参数和返回类型。这将起作用:

    class Response {
      private Double d;
    
      // getter and setter
    }
    
    @ApiMethod(name = "weather.bla")
    public Response Bla()
    {
      Response r = new Response();
      r.setD(2.5)
      return r;
    }
    

    查询参数(作为 API 方法的参数)是个例外。如果使用@Named 注解来注解参数,则不再需要是Java Bean(可以使用DoubleStringLong 等)例如:

    @ApiMethod(name = "weather.bla")
    public Response Bla(@Named("d") Double d)
    {
      Response r = new Response();
      r.setD(d)
      return r;
    }
    

    【讨论】:

    • 谢谢!我考虑过第一个解决方案,但它看起来只是错误的......第二个很棘手,你能向我解释一下这个注释是什么意思吗?再次感谢您的快速响应。
    • API 方法的参数默认出现在主体中(并且应该是 Java Bean)。命名参数出现在查询字符串中(作为键/值对),因此它们需要像“d”这样的名称,并且应该是标量类型而不是 Beans。
    • 所以我知道注释中的字符串将是在客户端显示的参数的名称,而“Double d”是刚刚用于该方法的类型和名称自己?
    • 正确。除了注释之外,它被视为普通方法参数。
    猜你喜欢
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多