4

我有一个使用 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 或任何其他类型的集合。

那我该怎么做呢?由于添加数据是如此简单和直接,我假设检索数据将以相同的方式执行,但显然我遗漏了一些对这件事至关重要的东西。

先感谢您!

4

2 回答 2

4

您在后端使用的类与您将在客户端中使用的类不同。Endpoints 将为您生成一组库,无论是在命令行上还是使用 Google Plugin for Eclipse 等工具。请参阅在 Android 客户端中使用端点

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

于 2013-04-15T18:12:17.677 回答
0

与将数据插入数据存储模型的端点(POST 类型的方法)类似,您需要有一个端点用于从数据存储模型中查询数据(GET 类型的方法)。定义这两个方法后,您需要生成发现文档和客户端库,以便客户端知道这两个方法并可以调用它们。如果您谈到在 Web 本身中显示数据,那么您可以使用所需的客户端库构建一个Javascript 客户端。

于 2013-05-21T12:37:01.633 回答