2013-11-22 1 views
4

Я пытаюсь работать с образцом приложения GAE/Android. Существует объект места.@Nullable @Named в GAE/Android Пример

В созданном классе PlaceEndpoint есть метод:

@ApiMethod(name = "listGame") 
    public CollectionResponse<Place> listPlace(
      @Nullable @Named("cursor") String cursorString, 
      @Nullable @Named("limit") Integer limit) { 

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

     try { 
      mgr = getEntityManager(); 
      Query query = mgr.createQuery("select from Place as Place"); 
      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<Game>) 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 (Game obj : execute) 
       ; 
     } finally { 
      mgr.close(); 
     } 

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

Как я понимаю cursor и limit все дополнительные Params.

Однако я не могу понять, как передать их с помощью Placeednpoint класса на стороне клиента:

Placeendpoint.Builder builder = new Placeendpoint.Builder(AndroidHttp.newCompatibleTransport(), new JacksonFactory(), null); 
builder = CloudEndpointUtils.updateBuilder(builder); 
Placeendpoint endpoint = builder.build(); 

try { 
    CollectionResponsePlace placesResponse = endpoint.listPlace().execute(); 
} catch (Exception e) { 
    e.printStackTrace(); 

Обычно, когда PARAMS не обнуляемый я передам их в endpoint.listPlace() метод. Но когда параметры являются обнуляемыми, клиентское приложение не видит альтернативного конструктора, который бы принял параметры.

Как я могу передать их тогда?

ответ

9

Для передачи параметров с клиентской стороны при отправке запроса запроса через конечные точки облака необходимо добавить положение для установки параметров. Чтобы отправить требуемый параметр из android, класс, в котором вы определяете путь REST и тип метода, должен включать опцию установленного курсора и лимита. Например, для строки cursorstring:

@com.google.api.client.util.Key 
     private String cursorstring; 

     public String getCursorstring() { 
     return cursorstring; 
     } 

     public ListPlace setCursorstring(String cursorstring) { 
     this.cursorstring = cursorstring; 
     return this; 
     } 

Наконец при вызове метода конечных точек от вашего андроида кода, вы должны передать значение с помощью setCursorstring, что будет что-то вроде:

CollectionResponsePlace placesResponse = endpoint.listPlace().setCursorstring("yourcursorstring").execute(); 
+0

для чего нужен @Nullable param? Я могу удалить его правильно? –

+0

Я не уверен в базе данных на основе Java, так как я использую python. пожалуйста, подтвердите с помощью примера кода для конечных точек Google Cloud, используя java. для любого параметра, который вам нужно отправить из android через конечные точки облака, используйте методы настройки, упомянутые выше для каждого параметра, и обработайте их в бэкэнде вашего приложения. если вы не используете какую-либо переменную в своем внутреннем коде, вы можете попробовать удалить –

+0

, вот и все! Спасибо друг! –

1

Там является дополнительным способом. Вы можете просто установить обнуляемое значение «курсор» это следующим образом:

CollectionResponsePlace placesResponse = 
    endpoint.listPlace().set("cursor", "Your Cursorstring").execute(); 

Где можно

0

Столкнувшись один и тот же вопрос, но бэкэнд разработан с использованием Java. Решение, предоставленное Тони м, работало как шарм. Просто пришлось адаптировать метод вызова на Android, и это сработало.