客户端的Google App Engine类

时间:2013-10-23 07:13:19

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

我正在使用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()”方法仍然不会退出。有没有正确的方法呢?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

(编辑 - 添加了一些impl。详细信息)

将Java对象(或实体)序列化为JSON非常简单,但细节取决于您使用的JSON库。端点可以在客户端上使用Jackson或GSON。但是对于我自己的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 )

(或者包含一个String列表的类,以便您可以在一个请求中发送多个实体。)

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

答案 1 :(得分:0)

尝试在该字段上使用@ApiResourceProperty