4

У меня есть приложение для Android, которое хранится в облаке с помощью Google App Engine. Я использую Cloud Endpoints. Моя проблема в том, что я не могу отправить данные с сервера на мой клиент (устройство Android), или, лучше сказать, пока не знаю, как это сделать.Как я могу отправить серверу (Google App Engine, Cloud Endpoints) информацию моему клиенту?

До сих пор мне удалось вставить данные в хранилище данных, создав конечную точку и вызывая метод, который отвечает за добавление записи в базу данных (расположенную на стороне сервера, в 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; 

Я сделал вывод, что это типа данных, характерная для серверной стороны, таким образом, я понятия не имею, как я могу бросить его в список , ArrayList или любой другой тип коллекции, который может использоваться на стороне клиента.

Как мне это сделать? Поскольку добавление данных было настолько простым и таким прямым, я предположил, что получение данных будет осуществляться таким же образом, но, по-видимому, мне не хватает чего-то существенного для этого.

Спасибо заранее!

ответ

4

Классы, используемые в бэкэнд, не совпадают с классами, которые вы будете использовать в клиенте. Конечные точки создадут для вас набор библиотек либо в командной строке, либо с помощью инструментов, таких как Google Plugin для Eclipse. См. Using Endpoints in an Android Client.

Созданный класс, представляющий коллекцию Note s в вашем примере, будет называться примерно как NotesCollection. Этот объект будет иметь метод getItems, который предоставляет вам List<Note>, который вы можете выполнять итерацию в своем приложении для Android.

0

Как и конечная точка для вставки данных в модель хранилища данных (методы типа POST), вам необходимо иметь конечную точку для запроса данных из модели хранилища данных (методы типа GET). После того, как вы определите оба этих метода, вам необходимо создать документ для обнаружения и клиентскую библиотеку, чтобы клиенты знали обо всех этих методах и могли их вызывать. Если вы говорите о отображении данных в самом веб-сайте, вы можете создать Javascript client с помощью необходимой клиентской библиотеки.

Смежные вопросы