Как стать автором
Обновить

Комментарии 4

GET(«odata/product?$filter=Id eq 111&$expand=dateReading($orderby=Date desc»)
… и…
String one = «odata/product?$filter=Id eq »;
String id = «777»;
String tree = "&$expand=dateReading($orderby=Date desc)";
String url = one + id + tree;


Лучше все эти параметры оставить на стороне ретрофита
GET(«odata/product?$filter=Id eq {id}&$expand=dateReading($orderby={sort} desc»)
Observable<List> getProducts(Path(«id») int id, Path(«sort») String sort);
Sort меняем на enum, главное не запутаться с преобразованиями
И посмотрите на Single вместо Observable
Спасибо, за коммент.
Статья написана чисто в ознакомительных целях,
потому как по этой теме мало информации, у меня в коде все по другому, но смысл тот же.
Теперь по теме.
Строки запроса по протоколу OData должны быть именно такими, разве только пробелы можно заменить на %20. Там где ретрофит через путь добавит параметр {id}, он добавит &(амперсанд), что не допустимо и сервер выдаст ошибку запроса. Это маленький хак именно для работы с OData с помощью ретрофита.
А по поводу {sort} — не понятно причем он здесь вообще,
в коде сортируется список по дате на убывание.
Observable был использован для понятности, вдруг если человек не использует RxJava,
а проблемы в приложении с OData имеет.
Path не должен добавить &, возможно вы путаете его с Query
{sort} для примера.
Хорошо что написали, мой коммент как раз для тех кто не знаком с Retrofit и RxJava.
@GET("odata/product?$filter=((Id eq 19) and (Name eq 'Available')) and ((Status eq 'OPEN') or ((Status eq 'CLOSED') and (Date ge 2020-02-13T06:39:48Z)))&$orderby=Status asc,Date desc&$top=10&$expand=AuthorId,CategoryId($expand=weight)&$count=true")

Вот это выносится в константы, описываются Path параметры и вы никогда не вспомните о том, что работаете с OData
Спасибо, я в курсе как можно играться со строками.
Скажите вы проверяли то что пишете здесь?
Я проверил.

Для тех кто читает эту статью и примет ее как руководство:
я бы рекомендовал четко придерживаться описанных мной инструкций.
Работа с OData не так проста как кажется на первый взгляд,
особенно когда нет толком документации — описывающей модель данных на сервере.
Весь код в статье написан и проверен лично, он РАБОЧИЙ.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории