Образец @допускающий значение null @названа в Гае / Андроид


Я пытаюсь работать над образцом приложения 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 все необязательные параметры.

Однако я не могу понять, как передать их с помощью класса 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();

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

Как же мне тогда их сдавать?

3 4

3 ответа:

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

Наконец, вызывая метод endpoint из вашего кода android, вы должны передать значение, используя setCursorstring, который будет выглядеть примерно так:

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

Есть еще один способ. Вы можете просто установить свое значение nullable 'cursor' следующим образом:

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

Где можно

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