0

我正在 Eclipse 上使用 GAE 开发一个 Android 应用程序。
在 EndPoint 类之一上,我有一个返回“Bla”类型对象的方法:

public Bla foo()
    {
        return new Bla();
    }

这个“Bla”对象包含一个“Bla2”类型的对象:

public class Bla {
    private Bla2 bla = new Bla2();
    public Bla2 getBla() {
        return bla;
    }
    public void setBla(Bla2 bla) {
        this.bla = bla;
    }
}

现在,我的问题是我无法从客户端访问“Bla2”类。(甚至“getBla()”方法也不存在)

我设法通过在 EndPoint 类上创建第二个方法来欺骗它,该方法返回一个“Bla2”对象:

public Bla2 foo2()
    {
        return new Bla2();
    }

现在我可以在客户端使用“Bla2”类,但“Bla.getBla()”方法仍然没有退出。有正确的方法吗?

4

2 回答 2

1

这不是“正确”的方式,但请记住,仅仅因为您正在使用端点,您不必坚持使用端点为您的所有实体做事的方式。

和你一样,我正在使用 GAE/J 和云端点,并且有一个 Android 客户端。在客户端和服务器上运行 Java 非常棒,因为我可以在所有项目之间共享代码。

正如你所做的那样,我的一些实体以正常的“端点方式”进行通信和共享。但是对于其他实体,我仍然使用 JSON,只是将它们粘贴在一个字符串中,通过通用端点发送它们,然后在另一端反序列化它们,这很容易,因为实体类在共享代码中。

这使我可以通过单个端点发送 50 种不同的实体类型,并且可以轻松地为这些实体自定义 JSON 序列化/反序列化。

当然,如果决定添加 iOS 或 Web(除非您使用 GWT)客户端,此解决方案会给您带来麻烦,但这对您来说可能并不重要。

(编辑 - 添加了一些 impl。细节)

从 JSON 序列化你的 java 对象(或实体)非常容易,但细节取决于你使用的 JSON 库。端点可以在客户端上使用 Jackson 或 GS​​ON。但是对于我自己的 JSON,我使用了 Android 内置的 json.org,它很容易下载并添加到我的 GAE 项目中。

这是某人刚刚发布的教程:http:
//www.survivingwithandroid.com/2013/10/android-json-tutorial-create-and-parse.html

然后我添加了一个这样的端点:

@ApiMethod(name = "sendData")
public void sendData( @Named("clientId") String clientId, String jsonObject )

(或具有包含字符串列表的类的东西,因此您可以在一个请求中发送多个实体。)

并将一个元素放入您的 JSON 中,该元素告诉服务器 JSON 应该被反序列化到哪个实体。

于 2013-10-23T16:57:52.323 回答
0

尝试@ApiResourceProperty在现场使用。

于 2014-05-13T11:49:37.767 回答