如何从服务器端(Google App Engine,Cloud Endpoints)将信息发送给客户端? - java

我有一个使用Google App Engine存储在云中的Android应用程序。我使用云端点。我的问题是我无法将数据从服务器发送到客户端(Android设备),或者更好的说,到目前为止,我还不知道该怎么做。

到目前为止,通过使用以下代码,我已经成功创建了一个端点并调用负责在数据库中添加记录的方法(位于服务器端,位于myProject-AppEngine中),将数据插入到数据存储中(在客户端上):\

 Noteendpoint.Builder endpointBuilder = new Noteendpoint.Builder(
 AndroidHttp.newCompatibleTransport(),
 new JacksonFactory(),
 new HttpRequestInitializer() {
 public void initialize(HttpRequest httpRequest) { }
 });
  Noteendpoint endpoint = CloudEndpointUtils.updateBuilder(
  endpointBuilder).build();
  try {
      // Construct the note.
      Note note = new Note().setDescription("Note DescriptionRoxana");
      String noteID = new Date().toString();
      note.setId(noteID);

      note.setEmailAddress("E-Mail AddressRoxana");        
      // Insert the Note, by calling a method that's on the server side - insertNote();
      Note result = endpoint.insertNote(note).execute();
  } catch (IOException e) {
    e.printStackTrace();
  }

但是我看不到从数据存储中检索数据并将其显示在服务器端的方法。我试图做同样的事情,创建一个端点,该端点将调用检索数据库中所有记录的方法(位于服务器上的方法),但是我的应用程序崩溃了。

从数据存储区检索数据的方法的代码如下:

    public CollectionResponse<Note> listNote(
        @Nullable @Named("cursor") String cursorString,
        @Nullable @Named("limit") Integer limit) {

    EntityManager mgr = null;
    Cursor cursor = null;
    List<Note> execute = null;

    try {
        mgr = getEntityManager();
        Query query = mgr.createQuery("select from Note as Note");
        if (cursorString != null && cursorString != "") {
            cursor = Cursor.fromWebSafeString(cursorString);
            query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
        }

        if (limit != null) {
            query.setFirstResult(0);
            query.setMaxResults(limit);
        }

        execute = (List<Note>) query.getResultList();
        cursor = JPACursorHelper.getCursor(execute);
        if (cursor != null)
            cursorString = cursor.toWebSafeString();

        // Tight loop for fetching all entities from datastore and accomodate
        // for lazy fetch.
        for (Note obj : execute)
            ;
    } finally {
        mgr.close();
    }

    return CollectionResponse.<Note> builder().setItems(execute)
            .setNextPageToken(cursorString).build();
}

您会看到,返回的类型是集合响应。执行以下导入后,您可以访问此类型的数据:

   import com.google.api.server.spi.response.CollectionResponse;

我推断这是服务器端的一种数据类型特征,因此,我不知道如何将其转换为可在客户端使用的List,ArrayList或任何其他类型的集合。

那我该怎么办呢?由于添加数据是如此简单和直接,因此我假设检索数据的方式相同,但是显然我缺少此事项的基本内容。

先感谢您!

参考方案

您在后端使用的类与您将在客户端使用的类不同。端点将通过命令行或使用诸如Google Plugin for Eclipse之类的工具为您生成一组库。参见Using Endpoints in an Android Client。

在您的示例中代表Note集合的生成的类将被命名为NotesCollection。该对象将具有getItems方法,该方法为您提供了可以在Android应用程序中迭代的List<Note>

使用Appengine开发服务器测试邮件(java) - java

我正在使用javamail从我的appengine应用程序发送邮件。它在部署中可以完美地工作,但是我不知道如何使用开发服务器来做到这一点。每当我需要测试sendmail时,就必须部署非常烦人的应用程序。 背景信息(为什么日志不起作用):我们知道电子邮件会转到appengine开发服务器上的日志。但是,想要从开发服务器发送电子邮件的主要原因是能够测试电子邮件的…

哪些SOAP库可用于Google App Engine? - java

我正在尝试将应用程序部署到Google App Engine,最终将通过SOAP与JIRA和其他服务交互。 GAE JRE不支持J2SE 6 java.xml.soap。* API。还有哪些其他简单的库可用于构建请求并通过URLConnection解析结果?Axis和CXF似乎是公认的SOAP / Web服务引擎,但是对于我的需求来说似乎有些过高。有什么建议…

用于本地开发服务器重定向到登录页面的Google App Engine远程api - java

尝试使用appcfg.py将数据上传到本地开发服务器时,出现302重定向错误。如果我使用浏览器访问相关页面(_ah / remote_api),则会得到一个登录页面,test @ example.com中的预填写有效,但cmd行中没有提示输入。我正在使用GAE的Java变体,并且之前使用过appcfg.py的upload_data命令,我认为这里的区别在于,…

使用对象化进行多对多关系? - java

我正在将我的应用程序从关系数据库移到对象化/谷歌应用程序引擎。该应用程序具有如下所示的关系:一个Message可以发送给许多Users。每个User可以有多个Message寻址到它们。我需要能够扫描寻址到特定Message的所有User。我该如何使用Objectify? 参考方案 有很多方法可以做到这一点。您可以在用户对象中保存消息列表。由于不需要进行查询,…

何时实例类更改在GAE应用程序中生效? - java

我最近将类从F1更改为F2,但没有注意到现有实例已重新启动。因此,我手动关闭了所有现有实例,希望所有新实例都是F2。我如何知道正在运行的实例在哪个实例类中?我无法在实例UI或日志中找到任何内容来确认正在运行的实例的实例类。根据the docs 您可以随时更改应用程序的当前前端实例类。 Python和Go应用程序会自动获取您选择的新实例类。必须重新启动Java…